如何发送当前迭代项目到h:selectBooleanCheckbox与f:ajax事件=change



我有下面的表格:

<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>

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>

public void onchangeEnabled(Item item) {
    // ...
}

参见:

  • 何时使用valuechangellistener或f:ajax listener?
  • 什么值我可以传递给事件属性的f:ajax标签?
  • 我怎么能通过选定的行commandLink内dataTable?
  • 了解PrimeFaces process/update和JSF f:ajax execute/render属性

对于selectBooleanCheckbox,它只在事件点击时做出反应,并且表单应该被张贴。

那么将这个添加到

复选框中

valueChangeListener = " # {mybean。myfunction} " onchange = " submit();"

它应该被解雇!

相关内容

  • 没有找到相关文章

最新更新