私は現在、JSF 1.2プロジェクト(IBMの実装と「会社のレイヤー」)に取り組んでいます。
問題
これが状況です(アイテムの数はほんの一例です)、単純なCRUD
- リストアイテム
- アイテムのリストがあります
- 詳細を表示するには、項目2をクリックします
- [変更]をクリックすると、変更ページにアイテム2の値が表示されます
- [戻る]ボタンを押してリストに戻ります
immediate="true"
(変更を送信したくないため) - 項目4の詳細
- アイテム4の変更>アイテム2の値が表示されます
しかし
- 「戻る」ボタンの「即時」属性をに設定すると
false
、項目4の値はOKです。 - inputTextコンポーネントの「無効」属性をに設定すると
true
、項目4の値はOKになります。 <h:outputText value="#{item4.myValue}/>
(UIInput)の代わりに<h:inputText value="#{item4.myValue}/>
(UIOutput )を使用する場合
また、デバッグモードで表示したいBeanが「アイテム4」であることを確認しました。
私が見つけたもの
Googleで調査した結果、この問題はJSFのライフサイクルに起因していることがわかりましたが、見つかったドキュメントとソリューションはJSFの特定の実装に関するものです。したがって、値には「submittedValue」ではなく「localValue」が入力されているためだと思います(@see EditableValueHolderインターフェイスは理解に役立ちます)。これらのページにはいくつかの解決策があります。
結果
それは機能しません(私はここにいないでしょう、私は誓います^^)。「更新」ソリューションは効果がありません。「消去入力」が怖いです。すべての入力フィールドを参照する必要があることを認めることはできません!setSubmittedValue()
さらに、IBMJSFのUIInputでメソッドが見つかりませんでした。「クリア」方式は効果がありません。1つの要素と、このコードを使用した完全なコンポーネントツリーを試してみました
public void cleanAllChildren(List<UIComponentBase> list){
for(UIComponentBase c : list){
this.cleanAllChildren(c.getChildren());
c.getChildren().clear();
}
}
しかし、成功しませんでした。だからここにいます。 私は何か見落としてますか?私が見なかった素晴らしいトリッキーな解決策はありますか?私はJSFのライフサイクルにあまり詳しくありません。