我想在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;
}
为什么我收到此警报?这是我唯一想到的那个页面。
提前致谢
答案 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。