gpt4 book ai didi

jsf - 在丰富的 :dataTable header 中实现 "Select all checkboxes"

转载 作者:行者123 更新时间:2023-12-04 05:57:05 25 4
gpt4 key购买 nike

我正在尝试在不使用 JavaScript 的情况下在 rich:dataTable header 中实现“选择所有复选框”复选框。

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>

支持 bean :
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选项,所以我的问题是,如何通过上述答案实现我的功能要求?或者有其他选择吗?

最佳答案

valueChangeListener在流程验证阶段执行其工作。但是,随着整个表单的提交,提交的值将覆盖 valueChangeListener 中的在更新模型值阶段更改了值。您确实希望在调用操作阶段执行“全选”作业。

更好的是让 JSF 跳过 valueChangeListener 中的所有剩余阶段。方法直到呈现响应,以便更改的值不会被覆盖。您可以通过调用 FacesContext#renderResponse() 来实现此目的。在 valueChangeListener方法。

public void selectAllComponents(ValueChangeEvent event) {
selectAll = !selectAll;
changeMap(selectedComponentIds, selectAll);
FacesContext.getCurrentInstance().renderResponse();
}

关于jsf - 在丰富的 :dataTable header 中实现 "Select all checkboxes",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9393625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com