我有一个JSF应用程序,由于某些原因,我需要在浏览器后面按钮刷新页面。我尝试实现BalusC在Force JSF to refresh page / view / form when opened via link or back button中给出的解决方案,唯一的区别是我的应用程序使用servlet版本2.5运行所以我在web.xml中进行了映射,如下所示
<?xml version="1.0" encoding="UTF-8"?>
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd” id =“WebApp_ID”version =“2.5”&gt; javax.faces.STATE_SAVING_METHOD 客户 javax.faces.CONFIG_FILES /WEB-INF/faces-config.xml com.sun.faces.config.ConfigureListener javax.faces.PROJECT_STAGE 生产 javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE 真正 login.xhtml FacesServlet的 javax.faces.webapp.FacesServlet 1 FacesServlet的 /面/ FacesServlet的 .jsf FacesServlet的 .faces FacesServlet的 .xhtml SessionUtil SessionUtil com.gaic.lpsr.utilclasses.SessionUtil SessionUtil / SessionUtil
<filter>
<filter-name>cacheFilter</filter-name>
<filter-class>com.gaic.lpsr.utilclasses.NoCacheFilter.java</filter-class>
</filter>
<filter-mapping>
<filter-name>cacheFilter</filter-name>
<servlet-name>FacesServlet</servlet-name>
</filter-mapping>
我的过滤器类是
public class NoCacheFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
if (!request.getRequestURI().startsWith(request.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) { // Skip JSF resources (CSS/JS/Images/etc)
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.
}
chain.doFilter(req, res);
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
// ...
}
我已经包含了jar servlet-api-2.5.jar。当我尝试在tomcat服务器(版本6.0.29)中部署应用程序时,我收到以下错误。
SEVERE: Exception starting filter cacheFilter
java.lang.ClassNotFoundException:com.gaic.lpsr.utilclasses.NoCacheFilter.java 在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645) 在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491) 在org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:269) 在org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422) 在org.apache.catalina.core.ApplicationFilterConfig。(ApplicationFilterConfig.java:115) at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4001) 在org.apache.catalina.core.StandardContext.start(StandardContext.java:4651) 在org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 在org.apache.catalina.core.StandardHost.start(StandardHost.java:785) 在org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 在org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445) 在org.apache.catalina.core.StandardService.start(StandardService.java:519) 在org.apache.catalina.core.StandardServer.start(StandardServer.java:710) 在org.apache.catalina.startup.Catalina.start(Catalina.java:581) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在java.lang.reflect.Method.invoke(Method.java:597) 在org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) 在org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
请指导我如何解决此问题。
答案 0 :(得分:1)
web.xml中的愚蠢错误:)。通过删除过滤器映射中的.java扩展来解决
<filter-class>com.gaic.lpsr.utilclasses.NoCacheFilter</filter-class>