使用confirmdialog时,primefaces不刷新页面

时间:2013-10-31 19:02:06

标签: jsf primefaces

我想创建一个带有注销链接的菜单。

我使用了这段代码:

<p:menubar>
            <p:menuitem value="Logout" oncomplete="confirmation.show()"/>

            <f:facet name="options">
                <p:inputText style="margin-right:10px" />
                <p:commandButton type="button" value="Logout" icon="ui-icon-extlink" />
            </f:facet>
</p:menubar>

<p:confirmDialog message="Are you sure you want to logout?"
            showEffect="bounce" hideEffect="explode"
            header="Logout" severity="alert"
            widgetVar="confirmation">

            <p:commandButton value="Yes Sure" update="messages"
                oncomplete="confirmation.hide()"
                actionListener="#{authBean.logout}"
                 />
            <p:commandButton value="Not Yet" onclick="confirmation.hide()"
                type="button" />

</p:confirmDialog>

以下是我在authBean中的登录和注销方法:

public String login() {
    try{
    UserService userService = new UserService();
    User currentUser = userService.findUser(username, password);
    System.out.println(currentUser);
    if (currentUser != null) {
        HttpSession session = (HttpSession) FacesContext
                .getCurrentInstance().getExternalContext().getSession(true);
        session.setAttribute("currentUser", currentUser);
        return "index";
    } 
    else return null;
    }
    catch (Exception e) {
        e.printStackTrace();
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.toString(), e.toString());
        FacesContext.getCurrentInstance().addMessage(null, message);
        return null;
    }

}

public String logout() {
    HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
            .getExternalContext().getSession(false);
    session.invalidate();
    return "login";
}

这是我的faces-config:

    <navigation-rule>
    <from-view-id>/*</from-view-id>
    <navigation-case>
        <from-outcome>logout</from-outcome>
        <to-view-id>/welcome.xhtml</to-view-id>
        <redirect />
    </navigation-case>
    </navigation-rule>

我的问题是,当我在确认对话框上按是时,页面不会刷新到welcome.xhtml。我必须按下相同的菜单按钮或任何其他按钮,以便页面更新。我想在确认对话框上按“是”后将其更新为welcome.xhtml。

1 个答案:

答案 0 :(得分:0)

我有同样的问题,经过多次阅读并尝试和错误后我得出的结论是,在命令按钮中,如果您调用的方法进行重定向,则必须使用action而不是actionListener。

还要看这篇关于h:表格的帖子。

PrimeFaces commandButton in confirmDialog not calling backing bean

祝你好运!