0

この回答を使用して、ログアウトしようとしました。

サーブレット コード:

@WebServlet(name = "LogoutServlet", urlPatterns = {"/logout"})
public class LogoutServlet extends HttpServlet {
    private static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(user.class);

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // Destroys the session for this user.
        if (request.getSession(false) != null) {
            request.getSession(false).invalidate();
        }

        // Redirects back to the initial page.
        logger.warn(request.getContextPath());
        response.sendRedirect(request.getContextPath());

    }
}

コードを表示:

<h:form>
      <h:commandButton value="Logout" action="/logout"/>
</h:form>

エラー:

Unable to find matching navigation case with from-view-id '/Admin/appManager.xhtml' for action '/logout' with outcome '/logout'

サーブレットが「/logout」URLパターンでリクエストを受け取っているとは思わない. 私は何を間違ったのですか?

4

1 に答える 1

1

JSF では、action次に呼び出されるサーブレットの URL ではありません。そうではなく、faces-config を介して、またはバッキング Bean から直接、ナビゲーション ルールを定義します。

logoutこのメッセージは、ページからのアクションに一致するアプリがないことを示してい.xhtmlます。

私は次のようなことをします

<h:commandButton value="Logout" action="#{backingBean.logout()}"/> 

ManagedBean BackingBeanメソッドがlogout()あり、「さようなら」アドレスに URL を返します。

注: サーブレットから操作を実行する場合は、通常の html タグ ( JSF コンポーネント<a><button>代わりに ) を使用してリンクする必要があります。

于 2012-07-24T05:52:51.540 に答える