我在rich:dataTable中有复选框列表,我想用header列中的一个复选框一次检查所有框。
<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 Bean中的代码:
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时,没有任何反应。我在这里错过了什么?我是否必须实施Map for&#34; selectAll&#34;财产呢?
感谢。
答案 0 :(得分:0)
首先。 f:ajax
没有actionListener
,它有listener
。阅读文档here。第二件事,您可以在valueChangeListener
上使用h:selectBooleanCheckbox
并且仅在那里使用<h:form>
<rich:dataTable value="#{checkallbox.allValues}" var="data" id="dataTable">
<rich:column>
<f:facet name="header">
<h:selectBooleanCheckbox value="#{checkallbox.selectAll}"
valueChangeListener="#{checkallbox.selectAllBox}">
<f:ajax render="dataTable" />
</h:selectBooleanCheckbox>
</f:facet>
<h:selectBooleanCheckbox value="#{checkallbox.checked[data]}">
<f:ajax />
</h:selectBooleanCheckbox>
</rich:column>
<!-- other columns -->
</rich:dataTable>
</h:form>
。第三,监听器里面的行框是错误的。基本上,您似乎需要阅读this topic。
现在,这是工作示例:
equals
您的代码可能存在其他问题(因为您只共享了一部分内容)。
@Entity
方法是好的。在95%的情况下,默认值不是,特别是如果它们是@PostConstruct
。您必须确保在开头填充地图为false。我使用@PostConstruct
protected void performPostConstructAction() {
for (StandardStructure s : getAllValues()) {
checked.put(s, false);
}
}
:
$(function() {
var deliveryDatePlusOneMonth = new Date();
deliveryDatePlusOneMonth.setMonth(deliveryDatePlusOneMonth.getMonth()+1);
// Initialize delivery date picker
$("#deliveryDateInputGroup").datepicker({
minDate: deliveryDatePlusOneMonth
});
// By default, set the delivery date to actual date + 1 month
$("#deliveryDateInputGroup").datepicker('setDate', deliveryDatePlusOneMonth);
// Declare on change on delivery date to close the date picker once the user has selected a date
$('#deliveryDateInputGroup').on('changeDate', function(ev){
$(this).datepicker('hide');
});
});
答案 1 :(得分:0)
谢谢Emil!我解决了。
public void selectAllBox(){
if(!selectAll){
for(StandardStructure item : ssTable.getDto()){
checked.put(item, true);
}
}else{
for(StandardStructure item : ssTable.getDto()){
checked.put(item, false);
}
}
}