我的问题是我们的jsf专家不在办公室几个月了,我必须解决以下问题:
在我们的项目中是一个如下定义的欢迎页面:
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
index.jsp指向servlet
<servlet>
<servlet-name>IndexServlet</servlet-name>
<servlet-class>de.libname.servlet.IndexServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>IndexServlet</servlet-name>
<url-pattern>/index.jsp</url-pattern>
</servlet-mapping>
在servlet中定义了一些导航规则,即特殊的起始页面:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("IndexServlet DoGet called");
if (!getAgreedDSGVOState(request)) {
// if not agreed dsgvo => force redirect to dsgvo page
// dsgvo page will show login error or possibility to accept/denied
response.sendRedirect("dsgvo.iface");
}
// some more cases deleted to keep it short
else {
response.sendRedirect("logout.jsp");
}
}
现在,用户已登录,并且IndexServlet重定向到正确的起始页面。但是,如果用户单击注销按钮
<ice:commandButton title="#{bundle.logout}" immediate="true" action="logout" image="images/menu/btn_logout.png" panelConfirmation="confirmLogout" />
faces-config:
<navigation-rule>
<display-name>gen_menu</display-name>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>logout</from-outcome>
<to-view-id>/logout.jsp</to-view-id>
<redirect />
</navigation-case>
</navigation-rule>
并直接再次登录,将不会调用IndexServlet。在这种情况下,我们的路由规则将被忽略。重新启动Tomcat。解决此问题的唯一可能性。它不是浏览器缓存(尝试隐身模式)。也许这是Java后端的缓存?登录(基于tomcat数据源领域的登录)后是否有可能强制使用IndexServlet?
对于Java和jsf来说我是一个新手,:-)请告诉我是否需要更多上下文。
谢谢丹尼斯