Primefaces Dialogframework

时间:2015-04-24 14:21:18

标签: jsf jsf-2 primefaces dialog

我有一个体面的应用程序,Primefaces负责GUI。但是我在尝试使用Dialog Framework时遇到了麻烦。

我相信我已经完成了文档中的所有指导原则。 对话框显示应该显示,但是' dialogReturn' -event似乎没有触发(或被捕获)。 至少我没有在html文件

中指定的监听器例程中获得任何活动
<p:commandLink title="Remove user" actionListener="#{ctrlUsersBean.pbDeleteUserPrepare(user)}" 
          styleClass="ui-icon ui-icon-trash">
    <p:ajax event="dialogReturn" listener="#{ctrlUsersBean.pbDeleteUser}" />
</p:commandLink>

在Dialog中我只有几个commandButtons。 在我从Dialog触发(我实际上到达那里)的actionListener中,我做了一个CloseDialog调用:

    MyObject w = new MyObject(1);
    RequestContext.getCurrentInstance().closeDialog(w);

我将一个对象传递回父页面,我期望在我的监听程序例程中将其取出

    public void pbDeleteUser(SelectEvent ev) {
        MyObject w =(MyObject)ev.getObject();
        ...

但我从未接受过此代码。

我正在使用SessionBean来运行所有涉及的代码。

我正在运行Primefaces 5.2版

我已在&#39;应用程序&section-section中包含指定的3行    faces-config.xml文件。

首先,我只在Netbeans中运行它(v.7.4),    但我觉得应该可行。

如果有人知道我哪里出错了,我会非常感激。

问候,Erik

由于问题,我添加了一些我的代码。

以下是来自xhtml文件的更多信息,显示变量来源&#39;用户&#39;:

           <p:dataTable id="showUsersList" var="user" value="#{ctrlUsersBean.showUsersList}" 
                     scrollable="true" scrollHeight="200" liveResize="true"
                     rowKey="#{user.usrEcid}" selection="#{ctrlUsersBean.showUserDetail}" selectionMode="single" 
                     resizableColumns="true" 
                     emptyMessage="No users">
            <p:ajax event="rowSelect" process="@this" listener="#{ctrlUsersBean.onSpreadRowSelect}" update=":showEditUsersForm"/>
                <p:column headerText="ecid" sortBy="#{user.usrEcid}"><h:outputText value="#{user.usrEcid}" /></p:column>
                    ...
                <p:column headerText="#{sessionUser.doTekst('html_users_Aksjon')}">
                    <h:panelGrid columns="1" styleClass="actions" cellpadding="0">
                        <p:commandLink title="Delete user" actionListener="#{ctrlUsersBean.pbDeleteUserPrepare(user)}" 
                                       styleClass="ui-icon ui-icon-trash">
                            <p:ajax event="dialogReturn" listener="#{ctrlUsersBean.pbDeleteUser}" />
                        </p:commandLink>

                    </h:panelGrid>
                </p:column>
        </p:dataTable>

和pbDeleteuserPrepare()例程

    public void pbDeleteUserPrepare(WlCdUser user) {
    // called from the user-spread
    setDeleteUser(user);    // Set the (global) user-to-delete
        ...
    try {
        RequestContext.getCurrentInstance().openDialog("deleteUser");
    } catch (Exception e) {
        logger.log(Level.SEVERE, "pbDeleteUserPrepare(), unable to open Dialog, Error=" + e.getMessage());
    }
}

deleteUser.xhtml文件非常简单

    <head>
    <title>Delete user</title>
    <meta name="viewport" content="width=device-width"/>
</head>
<h:body>
    <h:form id="deleteFrom" >
        <p:panel id="deleteConfirmation" widgetVar="deleteConfirmation" header="Confirm deletion="height:100px;vertical-align: center" >
            <p:outputLabel value="Full Delete, or just Deactivate user?"/>
            <p:panelGrid columns="3">
                <p:commandButton value="Yes, Full Delete" actionListener="#{ctrlUsersBean.pbDeleteUser(1)}"/>
                <p:commandButton value="No, just Deactivate" actionListener="#{ctrlUsersBean.pbDeactivateUser(0)}"/>
            </p:panelGrid>
         </p:panel>
    </h:form>
</h:body>

按钮背后的例程:

    public void pbDeleteUser(int operation) {
    // called from the delete dialog
    logger.log(Level.INFO, "Called pbDeleteUser(), operation = " + operation);
    WlCdUser w = DoUserOperation(getDeleteUser(), operation);
    RequestContext.getCurrentInstance().closeDialog(w);
}

public void pbDeactivateUser(int operation) {
    // called from the delete dialog
    logger.log(Level.INFO, "Called pbDeactivateUser(), operation = " + operation);
    WlCdUser w = DoUserOperation(getDeleteUser(), operation);
    RequestContext.getCurrentInstance().closeDialog(w);

}

0 个答案:

没有答案