0

さて、私はstackoverflowやネットの他のさまざまな部分を数日間読んだことがありますが、私の問題を解決する解決策はまだ見つかりません.

基本的に、私は2 つの必須フィールドをh:form持つを持っています。p:dialog両方のフィールドに入力すると、フォームが正常に送信され、ダイアログが閉じます。いずれかまたは両方のフィールドを空白のままにすると、必須フィールドの検証が失敗し、適切な必須メッセージでh:messagesコンポーネントが更新されます。p:dialogただし、検証が失敗した場合も、AJAX 呼び出しは「終了」しないように見え、後続の呼び出しが実行されなくなります。これは、私のp:ajaxStatusコンポーネントが画面から消えないことから明らかであり、何かがどこかにぶら下がっていることを示しています。これは、ページを更新することで解決されます。この時点で、他のすべての AJAX コンポーネントが再び機能し始めます。

さらに、これp:dialogは にありui:defineui:compositionマスター テンプレートにダンプされます。別の 内にネストされていませんh:form

<p:dialog id="dlgDecision"
                  header="Decision"
                  widgetVar="dialogDecision"
                  modal="false"
                  resizable="false"
                  appendToBody="true">
            <h:form id="fDlgDecision">
                <h:messages id="msgDlgDecision" binding="#{msgform.messages}" errorClass="errormsg" infoClass="infomsg1" layout="table"/>
                <h:outputFormat rendered="#{studentdetailsform.decisionAction == 'A'}">
                    <h:outputText value="Select an accept and admit code."/>
                </h:outputFormat>
                <h:outputFormat rendered="#{studentdetailsform.decisionAction == 'C'}">
                    <h:outputText value="Select a cancel and reason code."/>
                </h:outputFormat>
                <h:panelGrid columns="1">
                    <h:selectOneMenu id="apdcCode"
                                     value="#{studentDetails.apdcCode}"
                                     required="true"
                                     requiredMessage="Please choose a decision code.">
                        <f:selectItem itemLabel="Select Decision Code"/>
                        <f:selectItems value="#{apdcCodes.apdcCodeList}"
                                       var="apdc"
                                       itemValue="#{apdc.apdcCode}"
                                       itemLabel="#{apdc.apdcCode} - #{apdc.apdcDesc}"/>
                    </h:selectOneMenu>
                    <h:selectOneMenu id="admtCode"
                                     value="#{studentDetails.admtCode}"
                                     required="#{studentdetailsform.decisionAction == 'A'}"
                                     requiredMessage="Please choose an admit code."
                                     rendered="#{studentdetailsform.decisionAction == 'A'}">
                        <f:selectItem itemLabel="Select Admit Code"/>
                        <f:selectItems value="#{admtCodes.admtCodeList}"
                                       var="admt"
                                       itemValue="#{admt.admtCode}}"
                                       itemLabel="#{admt.admtCode} - #{admt.admtDesc}"/>
                    </h:selectOneMenu>
                    <h:selectOneMenu id="wrsnCode"
                                     value="#{studentDetails.wrsnCode}"
                                     required="#{studentdetailsform.decisionAction == 'C'}"
                                     requiredMessage="Please choose a reason code."
                                     rendered="#{studentdetailsform.decisionAction == 'C'}">
                        <f:selectItem itemLabel="Select Reason Code"/>
                        <f:selectItems value="#{wrsnCodes.wrsnCodeList}"
                                       var="wrsn"
                                       itemValue="#{wrsn.wrsnCode}"
                                       itemLabel="#{wrsn.wrsnCode} - #{wrsn.wrsnDesc}"/>
                    </h:selectOneMenu>
                    <p:commandButton id="decisionSubmit"
                                     value="Submit Decision"
                                     type="submit"
                                     action="#{mainform.saveDecision}"
                                     ajax="true"
                                     partialSubmit="true"
                                     process="@form"
                                     update="@form msgDlgDecision"
                                     oncomplete="if (!args.validationFailed) dialogDecision.hide()"/>
                </h:panelGrid>
            </h:form>
        </p:dialog>

デバッグとトラブルシューティングで既に行ったいくつかのこと:
- に移動しh:formました-必須フィールドp:dialog
の属性の値を使用してバッキング Bean を作成しました(必須メッセージの一部のみが表示されるという問題がありましたが、これでこの問題は解決しました) ) -に追加 -のイベントに 追加 -レンダリングされていないコンポーネントの検証に失敗したことが原因ではないことを確認 するために、必須フィールドを条件付きではない (属性を削除) にしてみました (ストローをつかむ...)renderedViewScoped
appendToBody="true"p:dialog
if (!args.validationFailed)oncompletep:dialog
rendered

編集:これは Chrome からのコンソール ダンプです。必須フィールドが null のフォームを送信すると、Javascript エラーがスローされます。

Uncaught SyntaxError: Unexpected token { jquery.js:14
bG.extend.parseJSON jquery.js:14
PrimeFaces.ajax.AjaxUtils.handleResponse primefaces.js:1
PrimeFaces.ajax.AjaxResponse primefaces.js:1
j.success primefaces.js:1
bZ jquery.js:14
b7.fireWith jquery.js:14
ca jquery.js:21
bZ

編集 2:以下は 2 つの JavaScript インポートのみです。どちらも、上記のui:defineおよびを介してページに適用されるテンプレートに含まれています。ui:composition

<h:outputScript library="primefaces" name="jquery/jquery.js" />
        <script type="text/javascript" src="#{request.contextPath}/resources/scripts/jscript.js" />

最初のインポートでは、ページに JavaScript を使用するコンポーネントがなくても、Primefaces は強制的に jQuery をページにインポートします。これは、カスタム スクリプトでjscript.jsjQuery を確実に使用できるようにするためです。

その他の情報:
JSF 2.1
Primefaces 3.4.2
Tomcat 6.0

4

3 に答える 3

0

jQuery.js を手動でインポートしないでください。これは、PrimeFaces によって既に暗黙的に行われているためです (内部で jQuery を使用しています)。その行を削除できます。

h:outputScriptまた、カスタム js ファイルを次のようにインポートする例もいくつか表示されます。

<h:outputScript library="scripts" name="jscript.js" />

しかし、これはおそらく問題の原因ではありません。これは、JSF 設計を改善するためのヒントにすぎません。

于 2013-03-12T15:12:28.617 に答える
0

アプリケーションでまったく同じ問題が発生しました。本当の問題は、jar の重複の問題でした。

私のアプリケーションには 2 つの primefaces jar があり、1 つは WEB-INF/lib ディレクトリの下にあり、もう 1 つは ear/lib ディレクトリの下にあります。WEB-INF の下のものを削除すると、すべてが期待どおりに機能し始めました。

js例外を検索することで、ネット上で解決策を見つけることができます。

于 2013-06-28T11:07:25.517 に答える
0

今日、PrimeFaces 4.0 スナップショット (2013-05-09) をダウンロードしてアプリをテストしたところ、同様のエラーが Google Chrome に表示されました。

基本的に、Bean から JSON 経由で p:schedule に送信されたデータから単一引用符を削除する必要がありました。「parse JSON」および「unexpected '」(予期しない一重引用符) というエラーが表示されたため、(p:schedule ではなく) データのデータ テーブル ビューに移動し、一部のデータに一重引用符が埋め込まれていることを認識しました。そのため、データから一重引用符を削除したところ、問題は解決しました。

以下のフォーラムトピックの URL をクリックしてください。

PF 4.0 SNAPSHOT 2013-05-09: スケジュールが機能しない

于 2013-05-10T22:51:23.787 に答える