【问题标题】:How I conditionally stop execution <p:dataTable>'s page event during page change如何在页面更改期间有条件地停止执行 <p:dataTable> 的页面事件
【发布时间】:2013-03-27 09:05:06
【问题描述】:

在我的应用程序中,我有一个&lt;p:dataTable&gt;,使用惰性数据模型进行分页。

当我从一个页面单击另一个页面按钮时,我有一个要求,应该生成一个确认弹出窗口,如果我单击 yes 然后我可以转到另一个页面,如果我单击“否”则我不能去另一个页面,我将留在当前页面。

.xhtml代码如下:

<h:form id="userListForm">
    <p:dataTable var="user" id="userTable" value="#{userListController.userDataModel}" lazy="true" paginator="true" rows="25" paginatorPosition="bottom"
            paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
            rowsPerPageTemplate="25,50,100" widgetVar="userDataTable" styleClass="userTable" selectionMode="single" >
       <p:ajax event="page" />

       <p:column id="nameColumn" headerText="#{adbBundle['name']}"
           sortBy="#{user.fullName}" filterBy="#{user.fullName}" styleClass="userName">
           <h:outputText value="#{user.fullName}" />
       </p:column>

       <!-- other columns -->

    <:/p:dataTable>
</h:form>

我使用的是 primefaces 3.4,jsf 2.0。

【问题讨论】:

    标签: jsf-2 primefaces


    【解决方案1】:

    从 RongNK 的回答中得到启发,您可以简单地这样做,

    添加此脚本块:

    <script type="text/javascript">
        function onPageStart() {
            return confirm('Are you sure?');
        }
    </script>
    

    并将其放入您的数据表中:

    <p:ajax event="page" onstart="return onPageStart()" />
    

    您也可以通过这种方式将其内联到&lt;p:ajax

    <p:ajax event="page" onstart="return confirm('Are you sure?');" />
    

    经过测试并使用 PrimeFaces 3.4.2

    【讨论】:

    • 你说得对,我使用 Primefaces 3.2,所以我先尝试了该代码但不工作,它在 3.4 中工作
    • 感谢@ajacob:我也做了同样的事情,就像你从RongNK 得到启发一样,再次感谢您的回复。
    【解决方案2】:

    你试过了吗:

    <p:ajax event="page" onstart="return tests()"/>
    
    <script type="text/javascript">
                    var vpage = 1;
                    var prevvalue = vpage;
                    function tests(){
                        if(confirm('Are you sure?')){
                            var p = userDataTable.getPaginator();
                            vpage = p.getCurrentPage();
                            prevvalue = vpage;
                            return true;}
                        else {
                            var p = userDataTable.getPaginator();
                            p.setPage(prevvalue,true);
                            return false;}
                    }
                </script>
    

    【讨论】:

    • 感谢回复,这里return true return false 不工作。我的意思是如果点击yesno 我不能取消被解雇的page event 的执行。
    • 我刚刚检查了上面的代码,它在第一次点击时不起作用,之后就起作用了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    相关资源
    最近更新 更多