<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()
直接调用。之后,所有的文本框都重新渲染。因为没有调用更新模型值阶段,所以用户输入的值永远不会设置为 Bean1 并且原始值显示在之后的文本框中reRender
。
我想问一下:
如何在里面手动调用更新模型值阶段
Bean1.onSelectOneMenuChange()
?如何获取内部用户输入的值输入,Bean1.onSelectOneMenuChange()
并将其设置到对应的字段中Bean1
?另一种方法是只重新渲染那些值在 Bean1.onSelectOneMenuChange() 内更新的文本框。但是,有很多情况。例如,一个值会改变所有文本框的值,而一个值可能只会改变一些文本框的值。我怎样才能
reRender
有条件地改变?哪种方法更适合可维护性?
更新 :
对于第 2 点,我发现 reRender 属性可以接受 EL 表达式,所以我尝试使用
<a4j:support event="onchange" action="#{Bean1.onSelectOneMenuChange}" reRender="#{Bean1.reRenderIDList}" /> .
在 Bean1.onSelectOneMenuChange() 内部,我将 Bean1.reRenderIDList 设置为一组需要根据业务需求重新渲染的 ID。Bean1.getRenderIDList()
页面刷新时运行。但是,当我在 UI 中更改 的值时<h:selectOneMenu>
, Bean1.getRenderIDList() 将永远不会再次运行。因此,文本框不能是reRender
?
任何想法?