sitemesh的問題及解決
再說 sitemesh 的問題,同樣是做 openfans 網摘功能出現的。做好了 IE 插件,有 fans 反饋說彈出頁面太大,這也難怪,用了 sitemesh , head 和 footer 都在頁面上,想縮小頁面,肯定得把 head 和 footer 都去掉,做個干凈點的。既然用了 sitemesh 肯定是希望最方便的搞定這個,而不用動任何邏輯(包括頁面邏輯)。這個好辦,文檔里有說,通過在 sitemesh.xml 中增加












就能搞定,這樣只需要使用參數如 saveSnippet.html?decorator=simple&confirm=true ,就能讓它使用指定的 decorator 。然后做一個去掉 head 和 footer 只保留必要的 js 和 css 引用的 simple.jsp 頁面,同時在 decorator.xml 中配

就應該可以搞定。
但怎么測,就是不使用這個 simple decorator 。沒辦法,只好跟進 sitemesh 源碼中去調試,進入 ParameterDecoratorMapper 類,它繼承了 AbstractDecoratorMapper 類,然后有一個 init 方法一個 getDecorator 方法。各打一個斷點, init 方法在 tomcat 啟動就會執行,也正常初始化了, getDecorator 方法卻始終不調用,一時想不出辦法。看到篇文章說不自己寫 sitemesh.xml 而使用自帶的 com/opensymphony/module/sitemesh/factory/sitemesh-default.xml 也可以,于是備份并刪除我寫的 sitemesh.xml ,居然成功了。為什么我寫的就不行呢?差別一是我的簡化了很多,只有








和剛加的
ParameterDecoratorMapper ,二就是順序,我的 ParameterDecoratorMapper 放在了 ConfigDecoratorMapper 后面,會不會是順序原因呢,調換一下,果然成功了。問題是解決了,原理呢?再花點時間跟一下代碼了解下原理,原來使用了 Factory ,它會調用各個配置的 Mapper 的 init 方法,并放入 map 中,然后到時選擇一個 Mapper ,如果符合條件就使用,否則繼續往下找。這里就有了順序的問題,因為我在 decorator.xml 中使用了





posted on 2007-03-11 22:54 pesome 閱讀(2999) 評論(0) 編輯 收藏 所屬分類: 開源軟件