关于datatable上的复选框

时间:2011-02-09 14:42:31

标签: java jsf datatable

我想在datatable上使用复选框:

 <h:selectBooleanCheckbox styleClass="selectBooleanCheckbox" valueChangeListener="#{CompletedInventoriesBean.changeUID}" value="#{CompletedInventoriesBean.isChecked(userinventorieswithuser.id)}" id="chkUser">
           <f:ajax event="change" process="chkUser"></f:ajax>
</h:selectBooleanCheckbox>

我的uids在会议上。我希望用户点击复选框,我在会话中添加或删除该ID。

没有问题,我可以在会话中处理bean的值。

但是在点击复选框时,我会收到如下警告:

  

serverError:class javax.faces.component.UpdateModelExcepton / sections / completed.xhtml @ 29,244   值= “#{CompletedInventoriesBean.isChecked(userinventorieswithuser.id)}”:   在main.com.brad.services.CompletedInventoriesBean类型上找不到属性'isChecked'

我的isChecked方法是这样的:

public boolean isChecked(int z) {
    boolean exist = false;
    for(int i=0; i < selectedSessionUI.getSessionInventories().size(); i++) {
        if (selectedSessionUI.getSessionInventories().get(i) == z) exist = true;
    }
    return exist;
}

为什么我收到此警报?这是我唯一想到的那个页面。

提前致谢

2 个答案:

答案 0 :(得分:2)

您无法将value属性绑定到接受参数的方法。它应绑定到由纯getter和setter表示的属性。

在这种特殊情况下,您更愿意使用Map<Long, Boolean>

private Map<Long, Boolean> checked = new HashMap<Long, Boolean>();

@PostConstruct
public void init() {
    for (int id : selectedSessionUI.getSessionInventories()) {
        checked.put(Long.valueOf(id), true);
    }
}

public Map<Long, Boolean> getChecked() {
    return checked;
}

结合使用
<h:selectBooleanCheckbox value="#{CompletedInventoriesBean.checked[userinventorieswithuser.id]}">

要收集所有已检查的行,只需在操作方法中循环显示checked地图。

(由于[]将在put()本身使用get()Map,因此不需要设置者。

答案 1 :(得分:0)

您收到此错误是因为您无法将参数传递给valueChangeListener方法。对此问题的类似问题已经回答here

有关此问题的更多信息,请under this link