【发布时间】:2011-09-15 14:53:27
【问题描述】:
我有一个 RichFaces pickList,用户应该能够从中选择多个项目,并且它应该直接反映在支持 bean 上。现在,如果出现验证错误或重新加载页面,我无法重新加载选择。有没有一种简单的方法可以告诉 RichFaces 我希望在每次更改时更新支持列表?
【问题讨论】:
我有一个 RichFaces pickList,用户应该能够从中选择多个项目,并且它应该直接反映在支持 bean 上。现在,如果出现验证错误或重新加载页面,我无法重新加载选择。有没有一种简单的方法可以告诉 RichFaces 我希望在每次更改时更新支持列表?
【问题讨论】:
您可以附加到onlistchange 事件。
使用a4j:support:
<rich:pickList ...>
<a4j:support event="onlistchange"/>
</rich:pickList>
或者,在较新的版本中,使用a4j:ajax:
<rich:pickList ...>
<a4j:ajax event="change" render="result"/>
</rich:pickList>
或者使用a4j:jsFunction:
<rich:pickList onlistchange="listChange();"... />
<a4j:jsFunction name="listChange" />
上述表单中的两种方法都将提交表单,从而导致提交选定的值。如果需要,您还可以为a4j:support/a4j:jsFunction 指定其他属性(例如ajaxSingle="true" 用于a4j:support 仅处理pickList 组件(其他输入将不会被验证/更新),action/actionListener 以列表更改时执行服务器端逻辑,reRender 等)。
【讨论】:
您是否尝试使用 ajaxRendered="true" 在面板中声明您的选择列表?这应该会自动重新渲染pickList
<a4j:outputPanel ajaxRendered="true">
<rich:pickList...
</a4j:outputPanel>
【讨论】:
<h:form>
<rich:pickList value="#{pickListBean.result}">
<f:selectItems value="#{capitalsBean.capitalsOptions}"/>
<a4j:support event="onlistchanged" reRender="result"/>
</rich:pickList>
</h:form>
【讨论】: