我正在使用JSF 2.2和tomcat 8开发一个Web应用程序,但我面临一个奇怪的问题......
例如,我有一个主页,它将调用一个managedbean,连接到数据库并返回响应。一切正常,但是,如果发生一些错误,它将重定向到我的错误页面(500.xhtml,我在我的web.xml文件中设置)。
错误发生后,我修复了错误,但我无法再访问主页,它总是将我重定向到我的500页。如果,我更改了主页的主页?任何它再次调用我的managebean并运行。此外,如果我更改服务器,从localhost更改为我的IP或127.1.0.0,它也会再次发出请求。
关注,我的web.xml。另外,我正在使用prettyfaces 3.4,不知道它是否相关但是...... Tomcat server.xml和web.xml是默认配置。
的web.xml
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>JSF Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JSF Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>home.xhtml</welcome-file>
</welcome-file-list>
<context-param>
<param-name>com.sun.faces.defaultResourceMaxAge</param-name>
<param-value>3628800000</param-value> <!-- 6 weeks. -->
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
<param-value>true</param-value>
</context-param>
<mime-mapping>
<extension>xhtml</extension>
<mime-type>application/xml</mime-type>
</mime-mapping>
<mime-mapping>
<extension>jsp</extension>
<mime-type>application/xml</mime-type>
</mime-mapping>
<error-page>
<error-code>403</error-code>
<location>/error/403.xhtml</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/error/404.xhtml</location>
</error-page>
<error-page>
<error-code>405</error-code>
<location>/error/405.xhtml</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/500.xhtml</location>
</error-page>
<error-page>
<error-code>503</error-code>
<location>/error/503.xhtml</location>
</error-page>
Prettyfaces:
@RewriteConfiguration
public class ConfigurationProvider extends HttpConfigurationProvider {
@Override
public Configuration getConfiguration(final ServletContext context) {
return ConfigurationBuilder.begin()
.addRule(Join.path("/home").to("/"))
.addRule(Join.path("/home").to("/home.xhtml").withInboundCorrection())
.addRule(Join.path("/company").to("/company.xhtml").withInboundCorrection())
.addRule(Join.path("/portfolio").to("/portfolio.xhtml").withInboundCorrection())
.addRule(Join.path("/contact").to("/contact.xhtml").withInboundCorrection())
.addRule(Join.path("/admin/login").to("/admin/login.xhtml").withInboundCorrection())
.addRule(Join.path("/admin/recovery").to("/admin/recovery.xhtml").withInboundCorrection())
.addRule(Join.path("/403").to("/error/403.xhtml").withInboundCorrection())
.addRule(Join.path("/404").to("/error/404.xhtml").withInboundCorrection())
.addRule(Join.path("/405").to("/error/405.xhtml").withInboundCorrection())
.addRule(Join.path("/500").to("/error/500.xhtml").withInboundCorrection())
.addRule(Join.path("/503").to("/error/503.xhtml").withInboundCorrection());
}
@Override
public int priority() {
return 10;
}
}
查看firefox调试器,网络选项卡显示主页(已缓存)和301代码重定向到500的请求。
@EDIT
这似乎是漂亮的面孔。 我只是删除它,并使用chrome浏览器(没有缓存)测试,错误后,我可以再次访问该页面。然后,我再次激活prettyfaces,问题又回来了。
知道为什么吗?