最近、いくつかの JSF アプリケーションを開発していますが、Web コンポーネント API の不整合に悩まされています。
サーバー側コードの JSF コンポーネント オブジェクトで .getValue() または .getSubmittedValue() を呼び出すと、非常に予測できない動作が発生することに気付きました。ドロップダウン リスト ボックスで .getValue() を呼び出すと、値を選択する前の値 (つまり、最後のページの更新からの値) を取得していることに気付きました。私は正しい値を次のように:
UIInput name = new UIInput(); // This is the control I have in a bean.
public void submit(ActionEvent ae)
{
someMethod(name.getValue().toString()); // Retrieves the "old" value
someMethod(name.getSubmittedValue().toString()); // Retrieves the correct value
}
また、フォーム フィールドで .getSubmittedValue() を呼び出すと、その値がコンポーネント オブジェクトでインスタンス化されていないため、null ポインター例外が発生する場合があることに気付きました。その場合、その状況で .getValue() を呼び出すと、正しい値。例:
HtmlInputText name = new HtmlInputText(); // This is the control I have in a bean.
public void submit(ActionEvent ae)
{
someMethod(name.getValue().toString()); // Retrieves the correct value
someMethod(name.getSubmittedValue().toString()); // Throws NullPointerException
}
これは JSF フレームワークの単なる「癖」ですか、それとも API を完全に間違って使用しているだけですか?? これら 2 つの方法についての洞察をいただければ幸いです。乾杯。