1

我有以下表格:

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

我怎样才能做到这一点?

4

2 回答 2

7

首先,该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) {
    // ...
}

也可以看看:

于 2013-01-14T12:15:18.343 回答
0

对于 selectBooleanCheckbox,它只对事件单击做出反应,并且应该发布表单。

所以将此添加到复选框

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

它应该被解雇!

于 2015-02-11T10:47:48.953 回答