追加ページに移動するリスティング ページがあります。追加ページには名前のテキストボックスがあり、その値はセッションスコープの Beanにバインドされています。
一覧ページには、アクション メソッドを介して追加ページに移動する追加ボタンがあります。このアクション メソッドは、名前のテキスト ボックスがバインドされているオブジェクトをクリアします。
また、追加ページにキャンセル ボタンがあります。これは、名前のテキスト ボックスがバインドされている値を再度クリアするアクション メソッドにバインドされています。
何も即時に設定されていない場合、これはすべて正常に機能します。
ただし、キャンセル ボタンを即時に設定し、名前フィールドに値を入力してからキャンセルをクリックすると、アクション メソッドが起動され、バッキング Bean のオブジェクトがクリアされ、リスト ページに移動します。次に追加をクリックすると、アクション メソッドはオブジェクトを再度クリアし (最適な方法であるかどうかは無視してください)、追加ページに移動します。追加ページの名前のテキスト ボックスが空であることが期待されますが、そうではありませんか?! 確かに、追加ボタンはすぐに表示されないため、値は再バインドされて空になるはずですか?
以下は、リスト ページの追加ボタンに関連する XHTML です。
<h:commandButton id="addButton"
value="Add"
action="#{myBean.gotoAdd}"/>
以下は、追加ページ (myBean はセッション スコープ) の入力ボックスに関連する XHTML であり、その後に追加ページのキャンセル ボタンの XHTML が続きます。
<h:inputText id="newName"
value="#{myBean.newObject.name}"
binding="#{myBean.newNameInput}"
styleClass="name" />
<h:commandButton id="cancelButton"
value="Cancel" immediate="true"
action="#{myBean.cancelAdd}"
onclick="return confirm('You sure?');"/>