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

标签 jsf richfaces seam facelets

我正在尝试在 rich:dataTable header 中实现“选择所有复选框”复选框,而不使用 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>

支持 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/

相关文章:

jquery - JSF 和 Jquery AJAX - 如何让它们一起工作?

jsf - 如何有条件地设置丰富的行样式 :dataTable

java - 在 primefaces 的 InputNumber 上使用自定义类型的 NumberFormatException

java - 事件未在 richfaces 中调用

configuration - Faces Servlet 抛出异常 java.lang.StackOverflowError

java - 如何将数据从 JSF 传递到 Java Applet

jsf - 丰富的扩展数据表列宽

java - 重复的 JSF 消息

用于读取 RSS 和 ATOM 提要的 java 库

hibernate - Seam POJO 的手动事务