siteMesh的一个中文bug

siteMesh的一个中文bug

       经前同事介绍,前几天一直在试用siteMesh,在试用过程中发现一些不想被装饰的页面出现页面显示不全的问题。页面上出现一小段HTML标签。提示异常为java.lang.IllegalStateException 大致意思是试图写多少多少字节却只写入了多少多少字节。非常郁闷。看了源代码。发现应该是com.opensymphony.module.sitemesh.filter.PageFilter包里的

1  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 
6  response.setContentLength(originalLength + bodyCNLenght + titleCNLength + javascriptCNOfhead);

这个解决方案是从网上搜索出来的,我想应该还有更好的解决方法。

你可能感兴趣的:(siteMesh的一个中文bug)