【问题标题】:Using a4j:support's onchange event with h:selectOneMenu将 a4j:support 的 onchange 事件与 h:selectOneMenu 一起使用
【发布时间】:2011-02-18 19:11:11
【问题描述】:
<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 之后的文本框中。

我想问:

  1. 如何在Bean1.onSelectOneMenuChange() 中手动调用更新模型值阶段?如何获取Bean1.onSelectOneMenuChange()内部用户输入的值输入,并将其设置为Bean1的对应字段?

  2. 另一种方法是只重新渲染那些值在 Bean1.onSelectOneMenuChange() 中更新的文本框。但是,有很多情况。例如,一个值会改变所有文本框的值,而一个值可能只会改变一些文本框的值。我怎样才能有条件地reRender?哪种方法更便于维护?

更新:

对于第 2 点,我发现 reRender 属性可以接受 EL 表达式,所以我尝试使用

 <a4j:support event="onchange"  action="#{Bean1.onSelectOneMenuChange}" reRender="#{Bean1.reRenderIDList}"  /> .

在 Bean1.onSelectOneMenuChange() 中,我将 Bean1.reRenderIDList 设置为一组需要根据业务需求重新渲染的 ID。 Bean1.getRenderIDList() 在页面刷新时运行。但是,当我在 UI 中更改 &lt;h:selectOneMenu&gt; 的值时, Bean1.getRenderIDList() 将永远不会再次运行。因此,文本框不能是reRender?

有什么想法吗?

【问题讨论】:

    标签: jsf richfaces ajax4jsf


    【解决方案1】:

    您的代码看起来不错。更新模型阶段没有理由不发生(您不使用immediate=true)。如果您有对话/验证错误,则永远不会调用该操作。检查您经历了哪些阶段。

    【讨论】:

    • 是的,有一些 将 java 脚本函数分配给 onblur 属性以进行一些验证。如何绕过那些 onchange 事件的验证阶段?我只想在用户填写所有数据并按下提交按钮时进行此类验证。谢谢!
    • ^^^ 对于那些希望限制发送内容的人,请尝试将 ajaxSingle 属性设置为 true livedemo.exadel.com/richfaces-demo/richfaces/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多