Jsf 2 JSF2选中/取消选中h列表:选择BooleanCheckbox

Jsf 2 JSF2选中/取消选中h列表:选择BooleanCheckbox,jsf-2,Jsf 2,我有一个循环,在ui:repeat中有一堆h:selectBooleanCheckbox,我希望能够通过单击来选中/取消选中所有这些复选框。以下是我如何尝试做到这一点: <h:selectBooleanCheckbox value="#{bean.selectAll}" valueChangeListener="#{bean.selectAllCustomers}"> <f:ajax execute="@form" render="entireLoop"/> &l

我有一个循环,在ui:repeat中有一堆h:selectBooleanCheckbox,我希望能够通过单击来选中/取消选中所有这些复选框。以下是我如何尝试做到这一点:

<h:selectBooleanCheckbox value="#{bean.selectAll}" valueChangeListener="#{bean.selectAllCustomers}">
    <f:ajax execute="@form" render="entireLoop"/>
</h:selectBooleanCheckbox>
循环:

<h:panelGroup id="entireLoop">  
  <ui:repeat var="customer" varStatus="status" value="#{bean.customers}">

    <tr> 
        <td>
    <h:selectBooleanCheckbox value="#{bean.customersMap[customer]}"/>
        </td>
      <td><h:commandLink value="#{customer.userID}" action="#{navBean.gotoEditCustomer(customer)}"/></td>
      <td>#{bean.getContact(user)}</td>
      <td>#{customer.companyName}</td>
      <td>#{customer.email}</td>
      <td>#{customer.phone}</td>
    </tr>       
  </ui:repeat>  
</h:panelGroup>
bean中的代码:

public void selectAllCustomers() {
    Iterator<User> keys = customersMap.keySet().iterator();
    while(keys.hasNext()) {
        User user = keys.next();
        customersMap.put(user, selectAll);
    }
}
单击以选中“全选”复选框时,我有两个问题:

什么也没发生。只有当我单击页面中的其他地方时,才会调用该方法。我怎样才能让它直接走

整个循环将从页面中消失。为什么?我试图让ajax只渲染selectBooleanCheckbox,方法是给它一个id或名称,但我得到一个错误,说这不是命名组件

如果使用标记的listener属性,则方法将工作,而不是使用valueChangeListener。应该是这样的:

<h:selectBooleanCheckbox value="#{bean.selectAll}">
    <f:ajax listener="#{bean.selectAllCustomers}" render="entireLoop"/>
</h:selectBooleanCheckbox>
public void selectAllCustomers(ValueChangeEvent e) {
    boolean newSelectAll = (Boolean) e.getNewValue();
    Iterator<Users> keys = customersMap.keySet().iterator();
    while(keys.hasNext()) {
        Users user = keys.next();
        customersMap.put(user, newSelectAll);
    }
}

谢谢你的回复,J4mes先生。但是当我听从你的建议时,我得到了以下错误:clientError:error MyFaces错误:受影响的类:MyFaces.\u impl.xhrCore.\u AjaxResponse。受影响的方法:processResponse错误名称:myfaces.\u impl.\u util.\u Dom.findByTagNames:片段必须是setbtw。我将我的html表改为h:dataTable,每当我选中该框时,愚蠢的消失行为就会消失。在我单击页面上的另一个位置之前,侦听器仍然没有这样做。我猜valueChangedListener正在等待确认值是否已更改(例如,当用户单击其他位置时),然后才开始工作?@user1037343::P Sry我错过了您之前的评论。这个错误在我看来很奇怪:。正如我提到的,您是否试用过e.getNewValue;?valueChangeListener在selectAll属性更新之前被触发。因此,在下一个请求之前,您不会看到您想要的。是的,我在方法中使用了您的建议。但它仍然不起作用。好吧,我在eclipse中检查了它,这在Firefox和Chrome中可以正常工作,但在IE中不能。你知道如何解决这个跨浏览器问题吗?