Lotus教程、Java教程、Java虚拟机、Java软件综合开发社区

Lotus、Domino、Java、C#、Web、数据库综合开发教程、资料社区

使用sitemesh导致 页面显示不全的问题



Published by admin on 09月 1, 2008

使用sitemesh后。
发现很多页面上的功能都不能用了比如说一个二级联动的下拉列表 只能显示前一个下拉选框,后一个选框却不见了,通过ie看原码 结果html只有一半。
3个配置的xml文件 其中 decorator.xml和web.xml都是通过官网实例修改路径并没有大的改动,sitemesh.xml没有设置但因该是系统使用默认设置。左思右想不得其解,经过网上查找答案后思考.

在使用sitemesh过程中,我的装饰器都能正常装饰文件了,我在decorator.xml中定义了2个装饰器 都是一个main.jsp,一个.panel.jsp 其中main.jsp装饰整个user_admin目录 jsp文件也正确放入了decorators目录下 3个配置文件内容如下
decorator.xml内容如下:

/user_admin/*

/test/*

web.xml内容如下



sitemesh
com.opensymphony.module.sitemesh.filter.PageFilter
sitemesh
/*sitemesh.xml完全按照官方示例copy,只修改了 字符编码这里就不贴出来了
我出现的问题是 当显示user_admin目录以外的jsp页面时会出现
html代码丢失的问题
页面不能正常显示 只能显示页面的上半部分 通过ie的查看源码 html代码只大概剩下2/3左右
而且一个通过js调用jsp的二级联动下拉列表(选择省,出现该省城市)也不能正常工作
然后通过 修改web.xml文件 将

sitemesh
/*

的url-pattern 设置成/user_admin/* 一切才能恢复正常
但是我感觉这不是解决问题的最好方法
查看sitemesh API,发现对FastPageParser的解释,原来FastPageParser将被HTMLPageParser替代
Deprecated. Use HTMLPageParser instead - it performs better and is more extensible.

个人觉得可能是以下原因:
1,sitemesh对页面的大小有限制,只能输出大小为一定量的响应流.??
2,配置有问题,可能是那里配置有误,或者是acegi过滤器和sitemesh是否会冲突??
那位遇到同样的问题或者有好的解决方案,大家探讨一下.

显示不全的原因为wicket有时候会设置Response的ContentLength,struts2的sitemesh插件在处理freemarker修饰页时会错误地使用该ContentLength,导致最终页面的大小变成被修饰页面的大小,因此页面显示不全。

解决方案,修改FreeMarkerPageFilter

FreeMarkerPageFilter的源文件在此:
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/FreeMarkerPageFilter.java?view=markup&pathrev=475013

157行:
template.process(model, res.getWriter());

改为:
res.setContentLength(-1);
template.process(model, res.getWriter());



【版权说明】:本网页上有部分内容来源于网上收集,但不能保证资料的完整性和准确性,仅提供参考和学习。如有侵权请立即通知我们,我们将立即删除,谢谢合作!

Add A Comment