Каждая строка в DataTable имеет флажки. Как снять предыдущий флажок, при проверке нового флажка - PullRequest
3 голосов
/ 20 февраля 2020

При нажатии кнопки «Добавить» создается пустая строка с текстовым полем и флажком. Я должен ввести данные в текстовое поле, но должен быть установлен только один флажок. Теперь я могу проверить все флажки. Но если установлен один, другие флажки должны быть сняты.

<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>

actionlistener для кнопки команды, чтобы добавить пустые строки в датируемую

    public void addReturnBodyToList() {

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

    }

ajax слушатель, чтобы снять другие флажки в бобах

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());
        }
    }

1 Ответ

1 голос
/ 25 февраля 2020

Этого можно добиться с помощью метода 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;
                    }
            } 
       }
...