使用this回答我尝试退出。
Servlet代码:
@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正在接受&#34; / logout&#34;网址模式。我做错了什么?
答案 0 :(得分:1)
在JSF中,action
不是要调用的下一个servlet的URL。而不是通过faces-config或直接从支持bean定义导航规则。
该消息告诉您,您的应用与logout
页面中的操作.xhtml
不匹配。
我会做像
这样的事情<h:commandButton value="Logout" action="#{backingBean.logout()}"/>
您使用方法ManagedBean
获得BackingBean
logout()
,并将网址返回“再见”地址。
注意:如果要从servlet执行操作,则应使用常规html标记(<a>
,<button>
而不是JSF组件)链接到它。