【问题标题】:PrimeFaces DataTable rowSelect cannot check checkboxPrimeFaces DataTable rowSelect 无法选中复选框
【发布时间】:2021-10-15 03:13:39
【问题描述】:

I was trying to "link" <p:ajax event="rowSelect"> and <p:ajax event="rowUnselect"> with <h:selectBooleanCheckbox> so when datatable row is selected, the checkbox would check together and when checkbox is checked, datatable row is selected too.

现在的问题:我可以在转到另一个分页页面时保存复选框的状态,但我需要选中复选框然后选择行,然后它才会保存状态。如果我尝试仅选中复选框并转到其他分页页面,当我返回分页页面时它不会保存状态,但如果我选择行并转到其他分页页面,它将保存状态。如果我选择行并选中复选框并转到另一个分页页面,它也不会保存状态。知道如何在单击任一 1 时检查复选框并选择行,并且如果转到另一个分页页面可以保存状态吗?

    <p:dataTable value="#{machine.sub}" var="subDir" 
                 id="fileDirectories" rowClasses="row1-whitebg,row2-bluebg" 
                 selectionMode="multiple" selectionPageOnly="false" 
                 rowKey="#{subDir.directory.path}" headerClass="title-column" 
                 rowIndexVar="idx" rows="10" rowsPerPageTemplate="10,20,50" paginator="true" 
                 paginatorAlwaysVisible="false" 
                 paginatorTemplate="#{WebConstant.PAGINATOR_TEMPLATE}">
    
                <p:ajax event="rowSelect" listener="#{machine.selectedRow}"/>
                <p:ajax event="rowUnselect" listener="#{machine.unSelectedRow}"/>
        
                <p:column>
                    <f:facet name="header">
                        <h:outputText value="#{msg['machine_download']}"/>
                    </f:facet>
                    <h:panelGroup id="panelGroupChkSelect">
                        <h:selectBooleanCheckbox id="chkSelect" value="#{subDir.selected}"
                                                 rendered="#{subDir.directory.file}">
                            <c:if test="#{machineLogExplorerPage.checkButton()}">
                                <f:attribute name="checked" value="checked"/>
                            </c:if>
                        </h:selectBooleanCheckbox>
                    </h:panelGroup>
                </p:column>
    </p:dataTable>

Java 代码

private boolean checked;

  public void selectedRow() {
    checked = true;
  }

  public void unSelectedRow() {
    checked = false;
  }

  public boolean checkButton() {
    return checked;
  }

【问题讨论】:

    标签: jsf primefaces primefaces-datatable


    【解决方案1】:

    您不需要自己实现复选框。只需添加一个选择列,例如:

    <p:column selectionMode="multiple"/>
    

    要跟踪选择的用途:

    <p:dataTable selectionMode="multiple"
                 selection="#{bean.listOfSelectedItems}"
                 ...>
    

    见:

    【讨论】:

    • 感谢您的回答。我之前实际上尝试过这种方法,但不幸的是,当我尝试像这样&lt;p:column selectionMode="multiple" value="#{subDir.selected}" /&gt; 输入时,我的 Java 中的值似乎不是“输入”。
    • 这不是跟踪所选内容的方法。查看更新。
    • 啊,经过几次尝试终于明白该怎么做了。非常感谢,在这方面苦苦挣扎了很久。谢谢!非常感谢您的帮助!
    猜你喜欢
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 2012-03-20
    • 1970-01-01
    • 2014-09-07
    • 2015-11-21
    相关资源
    最近更新 更多