私のWebアプリには、ダイアログで開く次のフォームがあります。
<!-- Event edit -->
<p:dialog id="editEvent"
widgetVar="dlgEdit"
modal="true"
resizable="true"
closable="true"
header="Edit event">
<p:panelGrid columns="1"
styleClass="gridNoLine">
<p:panelGrid columns="1">
<p:messages id="mEditMessages"
closable="true"
redisplay="true"/>
</p:panelGrid>
<p:panelGrid columns="2" styleClass="gridNoLine">
<h:outputLabel value="..." />
<p:inputText value="#{eventBean.event.eventName}"
required="true"
requiredMessage="XXX"/>
</p:panelGrid>
<p:panelGrid columns="2" styleClass="gridNoLine">
<h:outputLabel value="..." />
<p:inputTextarea value="#{eventBean.event.eventDescription}"
required="true"
requiredMessage="XXX" />
</p:panelGrid>
...
<p:commandButton id="cbUpdateEvent"
value="Update"
actionListener="#{eventBean.update}"
oncomplete="handleAction(xhr, status, args);"
process="@form"
update="mEditMessages OTHERCONTROLS"/>
</p:panelGrid>
</p:dialog>
このダイアログは、次のコードに示すように、DataTable の各行の commandButton 列から開かれます。
<p:dataTable value="#{eventBean.events}"
var="event">
<p:column styleClass="commandColumn">
<f:facet name="header">
<h:outputLabel value="Editar"/>
</f:facet>
<p:commandButton image="ui-icon-pencil"
title="Edit"
update="editEvent"
oncomplete="dlgEdit.show();"
process="@this">
<f:setPropertyActionListener value="#{event}" target="#{eventBean.event}" />
</p:commandButton>
</p:column>
...
</p:dataTable>
問題は次のとおりです。ダイアログを開くと、ランダム フィールドをクリアし (検証をテストするためだけに)、更新ボタンをクリックすると、ダイアログに警告メッセージが表示されます。罰金。しかし、別のフィールドをクリアして更新ボタンをクリックすると、そのコントロールに関連付けられている必要なメッセージが表示されません。そして、ダイアログを閉じて、任意の行の変更列をもう一度クリックすると、何も起こりません。ブラウザ コンソールに次のメッセージが表示されます。
Uncaught SyntaxError: Unexpected token {
OBS: 編集コマンドをクリックしてフィールドを変更せずに閉じると、アプリは正常に動作し、他のレコードの編集ダイアログを表示できます。
更新: template.xhtml コードは次のとおりです。
<h:body>
<div class="structure">
<div class="top">
</div>
<!--Base Menu -->
<h:form id="menu">
<div class="menu">
<p:menubar autoDisplay="true" >
...
</p:menubar>
</div>
</h:form>
<!-- Conteúdo -->
<div class="left_content">
<ui:insert name="content">
</ui:insert>
</div>
...
</div>
</h:body>
これが handleAction コードです。
function handleAction(xhr, status, args){
switch(args.key){
case 'update':
dlgEdit.hide();
break;
}
}