1

ログアウトリンクを含むメニューを作成したい。

私はこのコードを使用しました:

<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 に更新する必要があります。

4

1 に答える 1