sitemesh的問題及解決

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

          < mapper

          ???????????
          class = " com.opensymphony.module.sitemesh.mapper.ParameterDecoratorMapper " >

          ???????????
          < param?name = " decorator.parameter " ?value = " decorator " ? />

          ???????????
          < param?name = " parameter.name " ?value = " confirm " ? />

          ???????????
          < param?name = " parameter.value " ?value = " true " ? />

          ???????
          </ mapper >

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

          < decorator?name = " simple " ?page = " simple.jsp " ></ decorator >

          就應該可以搞定。

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

          < mapper

          ????
          class ="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper" >

          ???????????
          < param? name ="config" ?value ="${decorators-file}" ? />

          ???????
          </ mapper >

          和剛加的

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

          ????????
          <pattern>/*.html</pattern>

          ????
          </decorator>

          ,這樣如果 ConfigDecoratorMapper 放在前面,他就先找這個 Mapper ,一看 saveSnippet.html?decorator=simple&confirm=true ,符合 pattern 啊,就使用它了,另一個 ParameterDecoratorMapper 根本得不到機會,所以也進不了它的 getDecorator 方法。換了順序就是它先進去,所以執行,其它的 url 也是先找它,但不匹配,就又交給 ConfigDecoratorMapper 了。呵呵,問題也解決了,對 sitemesh 的認識又進了一步。

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

          <2007年3月>
          25262728123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導航

          統計

          公告

          主要記錄作者在學習java中的每一步足跡。除非特別說明,所有文章均為本blog作者原創,如需轉載請注明出處和原作者,如用于商業目的,需跟作者本人聯系。
          歡迎大家訪問:

          常用鏈接

          留言簿(16)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          java技術

          人間百態

          朋友們的blog

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 丽水市| 和顺县| 东乡族自治县| 朝阳市| 临城县| 江山市| 隆昌县| 连山| 呼玛县| 苍梧县| 荔波县| 时尚| 漠河县| 绥化市| 滁州市| 济宁市| 织金县| 蕉岭县| 凤庆县| 遵义县| 东明县| 宣城市| 深泽县| 巴青县| 邵武市| 类乌齐县| 伊吾县| 怀集县| 岳阳县| 辛集市| 汉寿县| 新闻| 永吉县| 堆龙德庆县| 翁源县| 玛曲县| 花莲市| 怀柔区| 太谷县| 呼玛县| 盱眙县|