我有以下表格:
<h:form>
<h:dataTable value="#{bean.items}" var="item">
<h:column>
<h:selectBooleanCheckbox value="#{item.enabled}" valueChangeListener="#{bean.onchangeEnabled}">
<f:ajax event="change" />
</h:selectBooleanCheckbox>
</h:column>
<h:column>#{item.name}</h:column>
</h:dataTable>
</h:form>
我想得到#{item}
或者至少#{item.name}
在值更改侦听器方法中:
public void onchangeEnabled(ValueChangeEvent e) {
// I would like to get #{item.name} here too.
}
我怎样才能实现这个目标?
首先,valueChangeListener
是不适合这项工作的工具。使用<f:ajax listener>
。第二,event="change"
对于复选框/单选按钮来说是错误的选择,因为它们的物理值实际上永远不会改变。你应该使用event="click"
,但这已经是默认值,因此您可以忽略它。
总而言之,正确的初始代码应该如下所示:
<h:selectBooleanCheckbox value="#{item.enabled}">
<f:ajax listener="#{bean.onchangeEnabled}" />
</h:selectBooleanCheckbox>
with
public void onchangeEnabled(AjaxBehaviorEvent event) { // Note: event argument is optional.
// ...
}
一旦像这样修复了它,那么您就可以轻松地利用 EL 2.2 功能来传递方法参数:
<h:selectBooleanCheckbox value="#{item.enabled}">
<f:ajax listener="#{bean.onchangeEnabled(item)}" />
</h:selectBooleanCheckbox>
with
public void onchangeEnabled(Item item) {
// ...
}
也可以看看:
- 何时使用 valueChangeListener 或 f:ajax 监听器?
- 我可以将哪些值传递给 f:ajax 标记的事件属性?
- 如何将选定的行传递到 dataTable 内的 commandLink?
- 了解 PrimeFaces 进程/更新和 JSF f:ajax 执行/渲染属性
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)