gpt4 book ai didi

jsf - 在h:selectOneMenu中使用a4j:support的onchange事件

转载 作者:行者123 更新时间:2023-12-04 03:06:02 25 4
gpt4 key购买 nike

<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.textbox1Bean1.textbox2Bean1.textbox3Bean1.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

任何想法?

最佳答案

您的代码看起来不错。没有理由不进行更新模型阶段(您不使用immediate=true)。而且,如果您遇到对话/验证错误,那么该操作将永远不会被调用。检查您经历了哪些阶段。

关于jsf - 在h:selectOneMenu中使用a4j:support的onchange事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2821934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com