JSF:如何绑定许多h:selectBooleanCheckbox?

mar*_*osh 7 checkbox jsf binding

我有一个问题是将h:selectBooleanCheckbox的列表绑定到我的bean.有人帮忙吗?

这不起作用:

<ui:repeat value="#{cartBean.productsList}" var="cartProduct" varStatus="i">
   <h:selectBooleanCheckbox binding="#{cartBean.checkboxes[i.index]}" />
</ui:repeat>

public class CartBean extends BaseBean {
  public List<Product> getProductsList() {...}

  private HtmlSelectBooleanCheckbox[] checkboxes;
  public HtmlSelectBooleanCheckbox[] getCheckboxes() {
    return checkboxes;
  }
  public void setCheckboxes(HtmlSelectBooleanCheckbox[] checkboxes) {
    this.checkboxes = checkboxes;
  }
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:

javax.faces.FacesException: javax.el.PropertyNotFoundException: /WEB-INF/flows/main/cart.xhtml @26,97 binding="#{cartBean.checkboxes[i.index]}": Target Unreachable, 'checkboxes' returned null
Run Code Online (Sandbox Code Playgroud)

我解决了我的问题.我使用下面的代码得到我想要的东西(感谢BalusC博客 - http://balusc.blogspot.com/2006/06/using-datatables.html#SelectMultipleRows):

<ui:repeat value="#{cartBean.productsList}" var="cartProduct" varStatus="i">
  <h:selectBooleanCheckbox value="#{cartBean.selectedIds[cartProduct.id]}" />
</ui:repeat>

public class CartBean extends BaseBean {
  private Map<Integer, Boolean> selectedIds = new HashMap<Integer, Boolean>();
  public Map<Integer, Boolean> getSelectedIds() {
    return selectedIds;
  }
}
Run Code Online (Sandbox Code Playgroud)

Rom*_*las 0

我不知道是否可以绑定存储在数组中的元素。但在您的代码中,问题是您的HtmlSelectBooleanCheckbox[]is null。因此,也许将您的 Java 代码更改为:

public HtmlSelectBooleanCheckbox[] getCheckboxes() {
    if (checkboxes == null) {
        checkboxes = new HtmlSelectBooleanCheckbox[getProductsList().size()];
    }
    return checkboxes;
}
Run Code Online (Sandbox Code Playgroud)

HtmlSelectBooleanCheckbox但我真的不确定它是否会起作用...也许解决方案是不在 Java 代码中绑定元素。为什么需要绑定它们?