質問
外国のJSFアプリケーションをデバッグしています。問題は、フォームを送信することですが、値は引き継がれていません。
フェーズリスナーでは、ライフサイクルが完全に実行されないことがわかります。そのため、フェーズ2 -5:復元ビューフェーズの後、レンダリング応答フェーズが直接呼び出されます。適用値、検証、モデルアクションの更新などが恋しいです。
したがって、これは鶏と卵の問題になる可能性があります。1。責任あるフェーズは呼び出されないため、新しいフォーム入力を引き継ぐことはできません。 2.システムは新しい入力を認識していないため、ビューを復元した後に直接レンダリングします。
responsecomplete()oder renderresponse()の呼び出しがないことを確認しました。
私はどういうわけか立ち往生しています。 2つの仮説のいずれかを検証するアイデアはありますか?またはそれを一般的にデバッグする方法は?誰かが同様の問題を抱えていましたか?
アップデート
JSFが気づいていないという疑いがあります ポストバックリクエスト そして、これをandのように処理します 最初のビュー. 。それは、私がフェーズ1と6のみを通過することを説明するでしょう。
JSFがこれを 非faces-request?
適切なものがあるかどうかを確認するにはどうすればよいですか treeid 電流で facesContext
.
解決 2
解決策を見つけました!申し訳ありませんが、非常にアプリケーションに特化していました。JSFのカスタムStateManagerは、JSF 1.2で使用できませんでした。それはこの奇妙なエラーを引き起こしました。 StateManagerを修正し、すべてが正常に機能しました。それは苦いもので、費用がかかります:-(
とにかくあなたの助けをありがとう:-)
他のヒント
私が投稿した答えから引用しています 前:
いつでも
UICommand
コンポーネントは、関連するアクションを呼び出していません。以下を確認してください。
UICommand
コンポーネントは内部に配置する必要がありますUIForm
コンポーネント(例:h:form
).- それはいけません ネスト 多数
UIForm
お互いのコンポーネント(インクルードファイルで注意してください!)。- 検証/変換エラーが発生してはなりません(使用
h:messages
それらすべてを取得するために)。- もしも
UICommand
コンポーネントは内側に配置されますUIData
コンポーネント、まったく同じことを確認してくださいDataModel
(背後のオブジェクトUIData
'svalue
属性)が保存されています。rendered
とdisabled
コンポーネントの属性とすべての親コンポーネントは、false
適用リクエスト値フェーズ中。- そうでないことを確認してください
PhaseListener
または何かEventListener
リクエスト応答チェーンでは、JSFライフサイクルを変更して、Invokeアクションフェーズをスキップしました。- そうでないことを確認してください
Filter
またServlet
同じ要求に応じて、チェーンがリクエストをブロックしましたFacesServlet
何とかして。
あなたの特定のケースでは、フェーズ2-5がスキップされているので、あなたは確信しています(?) FacesContext#renderResponse()
呼び出されておらず、原因3、6、7はリストからスクラッチすることができます。 JSFフェーズをデバッグする方法に応じて、原因4と5も傷つく可能性があります。他の原因を調査します。原因に関する私のセント2。見えない場合は確認してください <form><form></form></form>
生成されたHTMLソースで、これをJSFソースでバックトラックします。