?????? 經(jīng)前同事介紹,前幾天一直在試用siteMesh,在試用過(guò)程中發(fā)現(xiàn)一些不想被裝飾的頁(yè)面出現(xiàn)頁(yè)面顯示不全的問(wèn)題。頁(yè)面上出現(xiàn)一小段HTML標(biāo)簽。提示異常為java.lang.IllegalStateException 大致意思是試圖寫多少多少字節(jié)卻只寫入了多少多少字節(jié)。非常郁悶。看了源代碼。發(fā)現(xiàn)應(yīng)該是com.opensymphony.module.sitemesh.filter.PageFilter包里的
1?response.setContentLength(page.getContentLength());?
沒有考慮中文的情況。解決方案是將會(huì)出現(xiàn)的中文情況考慮進(jìn)去。
1?int?originalLength?=?page.getContentLength();//原來(lái)的長(zhǎng)度
2?int?bodyCNLenght?=?page.getBody().getBytes().length-page.getBody().length();//內(nèi)容處理中文長(zhǎng)度
3?int?titleCNLength?=?page.getTitle().getBytes().length-page.getTitle().length();//title處理中文長(zhǎng)度
4?int?javascriptCNOfhead?=?page?instanceof?FastPage???((FastPage)page).getHead().getBytes().length-((FastPage)page).getHead().length()):0?;//head的長(zhǎng)度,因?yàn)閖avascript中可能包括中文
5?
6?response.setContentLength(originalLength+bodyCNLenght+titleCNLength+javascriptCNOfhead);
這個(gè)解決方案是從網(wǎng)上搜索出來(lái)的,我想應(yīng)該還有更好的解決方法。