Я пытаюсь установить флажок «выбрать все флажки» в заголовке rich: dataTable без использования JavaScript.
XHTML:
<rich:column styleClass="center-aligned-text">
<f:facet name="header">
<h:selectBooleanCheckbox id="selectAll" title="selectAll" valueChangeListener="#{workspace.selectAllComponents}">
<a4j:support event="onclick" reRender="listcomponents"/>
</h:selectBooleanCheckbox>
</f:facet>
<h:selectBooleanCheckbox id="selectComponent" value="#{workspace.selectedComponentIds[componentInfo.id]}" />
</rich:column>
Фасоль:
public void selectAllComponents(ValueChangeEvent event) {
if (!selectAll) {
changeMap(selectedComponentIds,true);
setSelectAll(true);
} else {
changeMap(selectedComponentIds,false);
setSelectAll(false);
}
}
public void changeMap(Map<Long,Boolean> selectedComponentMap, Boolean blnValue) {
if(selectedComponentMap != null) {
Iterator<Long> itr = selectedComponentMap.keySet().iterator();
while(itr.hasNext()) {
selectedComponentMap.put(itr.next(), blnValue);
}
setSelectedComponentIds(selectedComponentMap);
}
}
Ответ, который я нашел здесь:
if (event.getPhase() != PhaseId.INVOKE_APPLICATION) {
event.setPhase(PhaseId.INVOKE_APPLICATON);
event.queue();
} else {
//do your stuff here
}
не складывается, потому что getPhase()
недоступен в событии ValueChangeEvent
. Я вижу только getPhaseId()
, который содержит опцию INVOKE_APPLICATION
, поэтому мой вопрос состоит в том, как я могу достичь своих функциональных требований с помощью приведенного выше ответа? Или есть альтернатива?