项目中使用SiteMesh2.4.1,
在web.xml中配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<filter>
<filter-name>redirectFilter</filter-name>
<filter-class>com.web.MyFilter</filter-class>
</filter>
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>redirectFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<session-config>
<session-timeout>120</session-timeout>
</session-config>
</web-app>
其中,redirectFilter是我的测试Filter。在主页面中因部分页面存储全局变量而不能刷新,故在SiteMesh的主页面中采用iframe,点击菜单后,执行:top.workspace.location.href=“/XXX.jsp”(workspace是iframe的name)
于是问题出现了:
页面被装载布局后,redirectFilter的doFilter被执行两次(经测试,如果主页含N个iframe,则执行N+1次)。
如下情况则不会出现上述问题:
1. 页面中不要使用iframe,则不会有问题(可是实际情况要求必须在页面中有一个区域不能被刷新,故此方法行不通)。
2. 在web.xml中,不要配置sitemesh的filter-mapping,则不会出现此问题(此中解决则不能使用sitemesh,也非吾愿,)。查阅许多资料,仍然无解,现在看最现实的选择是将sitemesh换为Struts Tiles,但Struts Tiles也有自身的问题,相对而言sitemesh更符合大型项目的商业实施要求。恳请各位大虾予以帮助。谢谢!
在web.xml中配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<filter>
<filter-name>redirectFilter</filter-name>
<filter-class>com.web.MyFilter</filter-class>
</filter>
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>redirectFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<session-config>
<session-timeout>120</session-timeout>
</session-config>
</web-app>
其中,redirectFilter是我的测试Filter。在主页面中因部分页面存储全局变量而不能刷新,故在SiteMesh的主页面中采用iframe,点击菜单后,执行:top.workspace.location.href=“/XXX.jsp”(workspace是iframe的name)
于是问题出现了:
页面被装载布局后,redirectFilter的doFilter被执行两次(经测试,如果主页含N个iframe,则执行N+1次)。
如下情况则不会出现上述问题:
1. 页面中不要使用iframe,则不会有问题(可是实际情况要求必须在页面中有一个区域不能被刷新,故此方法行不通)。
2. 在web.xml中,不要配置sitemesh的filter-mapping,则不会出现此问题(此中解决则不能使用sitemesh,也非吾愿,)。查阅许多资料,仍然无解,现在看最现实的选择是将sitemesh换为Struts Tiles,但Struts Tiles也有自身的问题,相对而言sitemesh更符合大型项目的商业实施要求。恳请各位大虾予以帮助。谢谢!
解决方案 »
- 急求一个 jqgrid 参考手册
- 后台报错java.lang.IllegalArgumentException: No bean specified
- jtable中的数据怎么更新到数据库中
- sturts标签重要么!在工作中经常用么!
- 大吃一惊,原来还有jvm错误,大侠们快来啊
- 请教一下struts1。2文本框怎么获取值的
- HSSF页面设定问题
- ejb高手来帮帮我啊,我求求大家了
- 关于JSP超链接列多余字符如何用省略号,有完整代码,分享下
- 由.net转向java,该从何处入手?
- 使用Spring的AOP功能时遇到no session or session was closed问题
- Servlet输出html的编码问题
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;public class MyFilter implements Filter { public void destroy() {
// TODO Auto-generated method stub
System.out.println("destroy filter");
} public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("doFilter filter");
chain.doFilter(request, response);
// TODO Auto-generated method stub
} public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
System.out.println("init filter");
}
}
<?xml version="1.0" encoding="ISO-8859-1"?>
<decorators defaultdir="/decorators">
<!-- Any urls that are excluded will never be decorated by Sitemesh -->
<excludes>
<pattern>这里是过滤的路径(文件)</pattern>
</excludes> <decorator name="main" page="main.jsp">
<pattern>/jsp/busicore/*.jsp</pattern>
<pattern>/jsp/busicore/*.do</pattern>
</decorator>
</decorators>