【问题标题】:clear selection on datatable after closing dialog with Escape使用 Escape 关闭对话框后清除数据表上的选择
【发布时间】:2017-08-01 01:44:51
【问题描述】:

我有一个p:commandButton,它调用了一个p:dialog,里面有一个p:dataTable。用户应该能够选择一行或多行(将每个元素保存在 bean 内的列表中)并单击“保存”按钮以将该数据保存在数据库中。我的问题是,当我从这个数据表中选择一些行然后按 ESC 键时,对话框会按原样关闭,但是当我再次打开该对话框时,仍然选择了已选择但未保存的值。我知道我可以制作 closeOnEscape="false" 并制作一个“取消”按钮并将 bean 中的列表设置为 null,但我想知道在用 ESC 关闭对话框后是否有办法“清理”该数据表。我正在使用 Primefaces 4.0

我的对话框如下所示:

<p:dialog widgetVar="coolName" modal="true"
        appendTo="@(body)" resizable="true" closeOnEscape="true"
        closable="false" position="center" showEffect="clip"
        hideEffect="clip" header="really cool dialog" width="1000">

        <h:form id="form">
            <p:growl sticky ="true" showDetail="true" />

                <p:tab title="List of Elements" id="tabOne">        

                    <p:dataTable id="tblOfElements" var="listElements"
                        paginator="true" rows="5" rowKey="#{listElements[0]}"
                        paginatorPosition="bottom" rowIndexVar="index"
                        paginatorTemplate="{FirstPageLink} {PreviousPageLink} {CurrentPageReport}
                             {NextPageLink} {LastPageLink} {RowsPerPageDropdown} "
                        currentPageReportTemplate="{currentPage} de {totalPages}"
                        emptyMessage="this list is empty"
                        selection="#{cBean.mBean.listOfSelection}"
                        value="#{cBean.mBean.listElements}"
                        style="text-align:center">

                        <f:facet name="header">  
                            List of Elements
                        </f:facet>
                        <p:column selectionMode="multiple" style="width:4%;text-align:center"/>
                        <p:column headerText="N°" style="width: 4%">
                            #{index + 1}                        
                        </p:column>
                        <p:column headerText="Name" style="width: 50%">
                            <h:outputText value="#{listElements[1]}" />
                        </p:column>
                        <p:column headerText="Date" style="width: 12%">
                            <h:outputText value="#{listElements[3]}" />
                        </p:column>
                    </p:dataTable>
                    <br />
                    <p:commandButton value="Save" style="float: right;"
                        actionListener="#{cBean.saveElements}"
                        onclick="PF('coolName').hide()" />

                    <br />
                    <br />
                </p:tab>
            </p:tabView>
        </h:form>

    </p:dialog>

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:

    您始终可以在打开对话框的按钮单击操作中使用&lt;p:resetInput&gt;。因此,即使在您按下退出按钮时对话框中选择的值占优势,每次单击并打开对话框时,您的选择也会被清除。

    ResetInput 用于从状态中清除缓存的值,以便组件从支持 bean 模型中检索它们的值

    希望对你有帮助!

    【讨论】:

    • @Moks:如果我的回答对你有用,你能投票赞成吗?
    猜你喜欢
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2012-08-01
    • 1970-01-01
    相关资源
    最近更新 更多