<h:selectOneMenu id="selectOneMenu" value="#{Bean1.val1}" >
<f:selectItems value="#{Bean1.selectItems}"/>
<a4j:support event="onchange" action="#{Bean1.onSelectOneMenuChange}" reRender="textbox1 , textbox2 , textbox3, textbox4" />
</h:selectOneMenu>
<h:inputText id="textbox1" value="#{Bean1.textbox1}"> </h:inputText>
<h:inputText id="textbox2" value="#{Bean1.textbox2}"> </h:inputText>
<h:inputText id="textbox3" value="#{Bean1.textbox3}"> </h:inputText>
<h:inputText id="textbox4" value="#{Bean1.textbox4}"> </h:inputText>
Bean1.onSelectOneMenuChange()
Bean1.textbox1
、、、およびの値Bean1.textbox2
を変更します(選択した値に応じて)。すべてのテキストボックス値を変更する場合もあれば、一部のテキストボックス値のみを変更する場合もあります。Bean1.textbox3
Bean1.textbox4
(Bean1.val1)
ユーザーが「selectOneMenu」ドロップダウンリストコントロールの値を変更すると、JSFフレームワークはモデル値の更新フェーズを呼び出さず、Bean1.onSelectOneMenuChange()
直接呼び出します。その後、すべてのテキストボックスがreRenderになります。モデル値の更新フェーズが呼び出されないため、ユーザーが入力した値にBean1が設定されることはなく、元の値がの後にテキストボックスに表示されreRender
ます。
聞きたい:
内部のモデル値の更新フェーズを手動で呼び出すにはどうすればよい
Bean1.onSelectOneMenuChange()
ですか?内部のユーザーが入力した値を取得しBean1.onSelectOneMenuChange()
て、の対応するフィールドに設定するにはどうすればよいBean1
ですか?もう1つのアプローチは、Bean1.onSelectOneMenuChange()内で値が更新されるテキストボックスのみを再レンダリングすることです。ただし、多くの場合があります。たとえば、値はすべてのテキストボックス値を変更し、値は一部のテキストボックス値のみを変更する可能性があり
reRender
ます。条件付きでどうすればよいですか?保守性のためにどの方法がより好まれますか?
アップデート :
ポイント2については、のreRenderプロパティがEL式を受け入れることができることがわかったので、使用してみました
<a4j:support event="onchange" action="#{Bean1.onSelectOneMenuChange}" reRender="#{Bean1.reRenderIDList}" /> .
Bean1.onSelectOneMenuChange()内で、Bean1.reRenderIDListを、ビジネス要件に基づいて再レンダリングする必要のあるIDのセットに設定しました。Bean1.getRenderIDList()
ページが更新されたときに実行されます。ただし、<h:selectOneMenu>
UIでの値を変更すると、Bean1.getRenderIDList()が再度実行されることはありません。したがって、テキストボックスをreRender
?
何か案が?