我有rich:dataTable里面的复选框列表,我想用标题列中的单个复选框同时检查所有框。JSF-2使用单个复选框选择/取消选中所有复选框列表
<rich:column id="includeInWHMapping" >
<f:facet name="header">
<h:selectBooleanCheckbox value="#{checkallbox.selectAll}">
<f:ajax actionListener="#{checkallbox.selectAllBox}" render="selectedForWHProcess" />
</h:selectBooleanCheckbox>
</f:facet>
<h:selectBooleanCheckbox id="selectedForWHProcess" value="#{checkallbox.checked[data]}">
<f:ajax actionListener="#{checkallbox.selectAllRows}"/>
</h:selectBooleanCheckbox></rich:column>
守则checkallbox豆:
private Map<StandardStructure, Boolean> checked = new HashMap<StandardStructure, Boolean>();
private boolean selectAll;
public boolean isSelectAll() {
return selectAll;
}
public void setSelectAll(boolean selectAll) {
this.selectAll = selectAll;
}
public Map<StandardStructure, Boolean> getChecked() {
return checked;
}
public void setChecked(Map<StandardStructure, Boolean> checked) {
this.checked = checked;
}
public void selectAllBox(ValueChangeEvent e){
boolean newSelectAll = (Boolean) e.getNewValue();
Iterator<StandardStructure> keys = checked.keySet().iterator();
while(keys.hasNext()){
StandardStructure ss = keys.next();
checked.put(ss, newSelectAll);
}
}
当我检查了H:的标题栏没有selectBooleanCheckBox发生。我在这里错过了什么?我是否也必须为“selectAll”属性实现Map?
谢谢。
'selectAllBox'是否被触发,您是否尝试渲染整个表? –
@EmilSierżęga是的,但它没有发生在复选框列表上的变化。我没有渲染整个表格,但复选框列。谢谢回复! –
你必须渲染整个表格。你不能渲染“一列”。在呈现的HTML中,没有列是这样的东西,所以你不想渲染几个像'tableId:_NUMBER_:selectedForWHProcess'这样的id。阅读这两个主题:http://stackoverflow.com/questions/6706849/how-to-do-a-column-level-render-in-datatable-in-jsf和http://stackoverflow.com/questions/16043218/refer-to-jsf-dynamic-generated-ids-based-ite-index- –