4

外部 JSF アプリケーションをデバッグしています。問題は、フォームを送信しても値が引き継がれないことです。

フェーズ リスナーを使用すると、ライフ サイクルが完全に実行されないことがわかります。つまり、フェーズ 2 -5 をスキップします。ビューの復元フェーズの後、応答のレンダリング フェーズが直接呼び出されます。値の適用、検証、モデルの更新アクションなどが懐かしいです。

したがって、これはニワトリが先か卵が先かという問題になる可能性があります。2. システムは新しい入力を認識しないため、ビューを復元した後に直接レンダリングします。

responseComplete() または renderResponse() の呼び出しがないことを確認しました。

私は何とか立ち往生しています。2 つの仮説のうちの 1 つを検証するためのアイデアはありますか? または、一般的にそれをデバッグする方法は? 誰かが同様の問題を抱えていましたか?


アップデート

JSFがポストバックリクエストを認識しておらず、これを初期ビューのように処理している疑いがあります。それは、フェーズ 1 と 6 のみに合格したことを説明します。

JSF がこれを非 faces-requestとして認識するかどうかを確認するにはどうすればよいですか? 現在の に適切なツリー ID
があるかどうかを確認するにはどうすればよいですか。facesContext

4

2 に答える 2

7

以前に投稿した回答から引用しています:

UICommandコンポーネントが関連付けられたアクションの呼び出しに失敗するたびに、次のことを確認してください。

  1. UICommandコンポーネントは、コンポーネント内に配置する必要がありUIFormます (例: h:form)。
  2. 複数のコンポーネントを互いに入れ子にすることはできません(インクルード ファイルに注意してください!)。UIForm
  3. 検証/変換エラーは発生していないはずです ( h:messagesそれらをすべて取得するために使用します)。
  4. UICommandコンポーネントがコンポーネント内に配置されている場合はUIData、まったく同じ ( 's属性のDataModel背後にあるオブジェクト ) が保持されていることを確認してください。UIDatavalue
  5. コンポーネントとすべての親コンポーネントの属性と属性は、リクエスト値の適用フェーズ中に評価されるべきではありませrenderedん。disabledfalse
  6. 要求と応答のチェーン内で JSF ライフサイクルが変更されていないこと、PhaseListenerまたはいずれかが呼び出しアクション フェーズをスキップしていることを確認してください。EventListener
  7. Filterなんらかの理由でリクエストをブロックしていない、またはServlet同じリクエスト - レスポンス チェーン内にある ことを確認してくださいFacesServlet

あなたの特定のケースでは、フェーズ 2 ~ 5 がスキップFacesContext#renderResponse()されており、呼び出されていないことが確実 (?) であるため、原因 3、6、および 7 をリストから削除できます。JSF フェーズのデバッグ方法によっては、原因 4 と 5 もスクラッチされる可能性があります。他の原因を調べてください。原因 2 についての私の意見です。<form><form></form></form>生成された HTML ソースに表示されないかどうかを確認し、JSF ソースでこれをバックトラックします。

于 2010-04-26T11:15:42.853 に答える
0

解決策を見つけました!申し訳ありませんが、これは非常にアプリケーション固有のものだったと思います。JSF 用のカスタム StateManager は、JSF 1.2 では使用できませんでした。それがこの奇妙なエラーを引き起こしました。StateManager が修正され、すべてが正常に機能しました。それは苦いですし、多くの時間がかかります:-(

とにかく助けてくれてありがとう:-)

于 2010-04-29T09:31:57.127 に答える