2

Spring 3.2.0、Spring webflow、JSF 2.1.11、Primefaces 3.4.1、Primefaces mobile 0.9.3 でアンケートを実装しています

仕様では、すべての質問を同じ物理的な .xhtml ページに配置しますが、一度に 1 つのセクションのみが表示されるようにセクションに分けます。モバイル Web サイトでは、すべてのセクションに pm:view を使用しています。

すべてのセクションが同じ Bean を参照してデータを送信し、すべてのセクションが入力された後に検証する必要があるため、ポスト ナビゲーションを使用する必要があります。これが私のコードの例です:

<pm:page id="page">

      <pm:view id="page1">
         <pm:content>
            <h:form id="page1Form">
                <h:panelGroup id="form1Container" >
                    <p:inputText id="input1" value="${managedBean.property1}" required="true" />

                    <p:commandButton  id="next" action="pm:page2" value="Next" process="form1Container" update="form1Container :page2Form"/>
                </h:panelGroup>
            </h:form>
         </pm:content>
      </pm:view>   

      <pm:view id="page2">
         <pm:content>
            <h:form id="page2Form">
                <h:panelGroup id="form2Container" >
                    <p:inputText id="input2" value="${managedBean.property2}" required="true" />

                    <h:commandButton id="registerSave" action="save" value="Save"/>
                </h:panelGroup>
            </h:form>
         </pm:content>
      </pm:view>   

</pm:page>

検証は正しく起動し、「次へ」ボタンを押すとinput1の値が更新されます。また、サーバーログにajaxリクエストが表示されます。ページに検証エラーがあり、リクエスト/レスポンスにエラーがなかったことを firebugs で確認できます。

ページ2に到達するために何が間違っていますか?

生成された html ページで page2 のコンテンツが css で隠されていることがわかります。javascript を使用して表示できるようにすることもできますが、すべての css クラスが html から欠落しています (jQuery はパフォーマンスのためにそれを行うと思います)。この問題の回避策として JavaScript を使用する方法はありますか?

再度、感謝します、

マティア

ps 「次へ」ボタンで ajax="false" も試しましたが、それでも機能しません。アクション文字列を Bean メソッドの戻りオブジェクトとして配置しようとしましたが、うまくいきませんでした。

4

1 に答える 1

0

古い Primefaces モバイル ナビゲーション スタイルで回避策を見つけました。ajax コマンド ボタンで直接 PrimeFaces.navigate を呼び出し、事前に検証エラーをチェックします。コードは次のようになります。

<p:commandButton  id="nextButton_page1" action="pm:page2" oncomplete="if (!args.validationFailed) PrimeFaces.navigate('#page2',{});" value="Next" process="form1Container" update="form1Container :page2Form"/>

前のボタンについても同様です。これは私にとってはうまくいきます.ajax呼び出しはform1の値を処理し、検証エラーが発生した場合はナビゲーションを停止し、すべてが正常な場合はpage2に移動します.

if (!args.validationFailed) は検証エラーをチェックします

PrimeFaces.navigate('#page2',{}) 次のページに移動します

良い一日を過ごしてください、

マティア

于 2013-04-11T09:58:30.160 に答える