?????? 經前同事介紹,前幾天一直在試用siteMesh,在試用過程中發現一些不想被裝飾的頁面出現頁面顯示不全的問題。頁面上出現一小段HTML標簽。提示異常為java.lang.IllegalStateException 大致意思是試圖寫多少多少字節卻只寫入了多少多少字節。非常郁悶??戳嗽创a。發現應該是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);
這個解決方案是從網上搜索出來的,我想應該還有更好的解決方法。