0

私の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;
    }
}
4

1 に答える 1

1

エラーが見つかりました。ここで指摘されているように、primefaces jar を 2 回インポートしていました。WEB-INF/lib フォルダーと pom.xml ファイルに primefaces-3.4.jar がありました。WEB-INF/lib 内の jar を削除したところ、すべてがうまくいきました。

于 2012-11-27T03:17:47.593 に答える