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'

我不认为 servlet 正在使用“/logout” url 模式接收请求。我做错了什么?

4

1 回答 1

1

在 JSF 中,action不是下一个要调用的 servlet 的 URL。相反,它通过 faces-config 或直接从支持 bean 定义导航规则。

logout该消息告诉您,您的应用与您.xhtml页面中的操作不匹配。

我会做类似的事情

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

你有一个ManagedBean BackingBeanwith 方法logout()并将 URL 返回到“再见”地址。

注意:如果要从 servlet 执行操作,则应使用常规 html 标记(<a><button>而不是 JSF 组件)链接到它。

于 2012-07-24T05:52:51.540 回答