jsf - DataTable 中的每一行都有复选框。如何在选中新复选框时取消选中前一个复选框

标签 jsf primefaces datatable selection

单击“添加”按钮后,将创建带有文本框和复选框的空行。我必须在文本框中输入详细信息,但只应选中一个复选框。现在我可以选中所有复选框。但是,如果选中了一个,则应取消选中其他复选框。

<p:commandButton value="Add"
                        actionListener="#{createReturns.addReturnBodyToList}" ajax="true"
                        update="bodyTable messages" style="margin-bottom:10px;"/>
<p:dataTable id="bodyTable" value="#{createReturns.returnBodyList}"
                        var="returnBody">
<p:column headerText="Element Name" style="width:250px;">
                            <p:inputText id="elementName" value="#{returnBody.elementName}"
                                style="width:240px;" />

                        </p:column>
<p:column headerText="KeyColumn" style="width:80px">
                            <p:selectBooleanCheckbox value="#{returnBody.keyColumn}" id="key">

                                <p:ajax listener="#{createReturns.toggleCheckBox()}"
                                    event="click" update="key">
                                    <f:attribute name="element" value="#{returnBody.elementName}"></f:attribute>
                                </p:ajax>
                            </p:selectBooleanCheckbox>
                        </p:column>
</p:datatable>

用于在数据表中添加空行的命令按钮的 Action 监听器

    public void addReturnBodyToList() {

        returnBody = new ReturnBody();
        returnBodyList.add(returnBody);

    }

ajax 监听器取消选中 bean 中的其他复选框

public void toggleCheckBox(ActionEvent actionEvent) {
        String elementName = (String) actionEvent.getComponent()
                .getAttributes().get("element");

        for (ReturnBody body : returnBodyList) {
            if (!body.getElementName().equals(elementName))
                body.setKeyColumn(false);
            System.out.println("Check ajax: " + body.toString());
        }
    }

最佳答案

您可以在 toggleCheckBox() 方法中实现这一点。

    boolean flag; //Global
    String lastChecked=new String();//global

    if(!flag){
        setFlag(true);
        lastChecked=elementName;
        }

    if(flag){
     for (ReturnBody body : returnBodyList) {
                if (body.getElementName().equals(lastChecked)){
                    body.setKeyColumn(false);
                    lastChecked=elementName;
                    }
            } 
       }

关于jsf - DataTable 中的每一行都有复选框。如何在选中新复选框时取消选中前一个复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60312615/

相关文章:

jsf - 如何将 Activiti 工作流与 JSF 应用程序集成

jsf - 我最初如何隐藏 p :dataTable with p:columnToggler 中的列

asp.net - Option Strict On 不允许从 'String' 到 'Integer' 的隐式转换

c# - 如何使用 LINQ 根据需要拆分的字符串列表筛选数据表?

java - JSF 与 RMI 教程

jsf - javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL 自 Java EE 7/EL 3.0 起不再工作

java.io.NotSerializedException : com. sun.faces.context.FacesContextImpl weblogic

css - 使用 primefaces 3.1 实现自定义 CSS

java - PrimeFaces 3.0 - 如何从支持 bean 以编程方式设置 TreeNode 图标?

jsf - 如何获取 p :datatable direclty on selecting the row? 的选定行