最近用strtus2开发一个小项目,发现如果一个页面上有中文的话,会使页面上的内容显示不完整。在网上找了些资料,终于找到解决方案。
原文:http://www.blogjava.net/JavaVM/archive/2006/07/06/57053.html
因为使用了sitemesh,所以在文件com.opensymphony.module.sitemesh.filter.PageFilter 中的 response.setContentLength(page.getContentLength());
出现问题。这样写法是没有考虑到中文问题。
做如下修改:
1、 int originalLength = page.getContentLength();//原来的长度
2、 int bodyCNLenght = page.getBody().getBytes().length-page.getBody().length();//内容处理中文长度
3、 int titleCNLength = page.getTitle().getBytes().length-page.getTitle().length();//title处理中文长度
4、 int javascriptCNOfhead = page instanceof FastPage? ((FastPage)page).getHead().getBytes().length-((FastPage)page).getHead().length()):0 ;//head的长度,因为javascript中可能包括中文
5、 response.setContentLength(originalLength+bodyCNLenght+titleCNLength+javascriptCNOfhead);
另: firmgoal老兄的文章中也提到过此问题,他的文章:wicket+struts2+sitemesh+freemarker页面显示不全的解决方案
显示不全的原因为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());
分享到:
相关推荐
例如,Struts2的displaytag、sitemesh等标签,可以轻松实现数据展示和页面布局。在描述中提到的"Struts2标签",就是指这些用于简化视图层开发的组件,它们能够帮助开发者快速创建动态、交互式的用户界面。 Spring...
- **Struts**:Sitemesh是Struts的官方推荐页面装饰解决方案,可以方便地与Struts1和Struts2集成。 6. **Sitemesh的优势** - **简洁易用**:Sitemesh的配置和使用相对简单,对于提高开发效率和保持页面一致性有很...
Tiles2 虽然功能强大,但在某些情况下,Sitemesh 提供了更简单、更轻量级的解决方案。 首先,让我们理解 Spring MVC 和 Spring Web Flow。Spring MVC 是一个用于构建 Web 应用程序的模型-视图-控制器(MVC)框架,...
为了解决这一问题,Sitemesh提供了一种新的解决方案。通过在Web应用中部署一个过滤器(filter),该过滤器可以拦截每一个HTTP请求,并根据配置动态地将页面的不同部分组合起来,形成一个完整的视图。这样一来,不仅...
5. **与Web框架的集成**:sitemesh可以方便地与常见的Java Web框架(如Spring MVC、Struts等)集成,提供统一的页面装饰解决方案。 6. **自定义装饰逻辑**:开发者可以通过实现自定义的Decorator类,添加特定的装饰...
3. **spring.jar**:Spring框架是一个全面的后端开发解决方案,提供了依赖注入、面向切面编程、事务管理等功能。Spring与Struts2可以很好地集成,共同构建复杂的Java应用。 4. **mail.jar**:这是一个JavaMail API...
**Sitemesh** 是一个开源的网页布局和装饰框架,主要用在Java Web应用程序中,用于提供页面布局和模板设计的解决方案。它可以帮助开发者统一网站的外观和感觉,通过分离内容、样式和布局,使代码更加模块化和可维护...
3. **使用Spring MVC或Struts2**:如果项目使用了Spring MVC或Struts2等框架,Sitemesh有对应的整合方式,可以更方便地实现页面装饰。 4. **处理Ajax请求**:Sitemesh默认不处理Ajax请求,但可以通过自定义Filter或...
总的来说,SiteMesh 是一种强大的网页布局工具,对于那些希望保持网站界面一致性、提高开发效率的团队来说,是一个非常有价值的解决方案。通过理解其核心概念和工作原理,开发者可以轻松地在项目中集成 SiteMesh,...
Struts2允许开发者根据项目需求定制自己的解决方案,而丰富的插件和社区资源则提供了大量现成的解决方案,降低了开发难度和维护成本。 接下来,我们会对Web基础技术进行简要介绍,包括B/S和C/S系统的区别,JSP和...
一种解决方案是全面重写系统,并使用像Struts-Tiles这样的框架来确保统一的外观和感觉。然而,这种方法通常成本高昂且不切实际。另一种方法是尝试让所有应用系统的部分都具有相同的外观和感觉,但这将导致维护上的...
Struts2是一个强大的MVC(Model-View-Controller)框架,它为Java Web应用程序提供了结构化和可扩展的开发方式。...这使得Struts2能够适应各种复杂的项目需求,提供了一种高效且易于维护的Java Web开发解决方案。
4. **SITEMESH-LICENSE.txt** - SiteMesh是页面布局和装饰框架,它为Struts 2提供了页面级别的装饰功能,帮助统一网站的外观和布局。 5. **OGNL-LICENSE.txt** - OGNL的许可证文件再次出现,强调其重要性。 6. **...
Spring框架是一个开源的轻量级Java SE/EE全栈解决方案,它提供了一整套的企业级应用开发解决方案。Spring框架的核心特性包括依赖注入(Dependency Injection, DI)、面向切面编程(Aspect-Oriented Programming, AOP...