sitemesh的問題及解決

          再說 sitemesh 的問題,同樣是做 openfans 網(wǎng)摘功能出現(xiàn)的。做好了 IE 插件,有 fans 反饋說彈出頁面太大,這也難怪,用了 sitemesh head footer 都在頁面上,想縮小頁面,肯定得把 head footer 都去掉,做個干凈點(diǎn)的。既然用了 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 >

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

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

          就應(yīng)該可以搞定。

          但怎么測,就是不使用這個 simple decorator 。沒辦法,只好跟進(jìn) sitemesh 源碼中去調(diào)試,進(jìn)入 ParameterDecoratorMapper 類,它繼承了 AbstractDecoratorMapper 類,然后有一個 init 方法一個 getDecorator 方法。各打一個斷點(diǎn), init 方法在 tomcat 啟動就會執(zhí)行,也正常初始化了, getDecorator 方法卻始終不調(diào)用,一時想不出辦法。看到篇文章說不自己寫 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 后面,會不會是順序原因呢,調(diào)換一下,果然成功了。問題是解決了,原理呢?再花點(diǎn)時間跟一下代碼了解下原理,原來使用了 Factory ,它會調(diào)用各個配置的 Mapper init 方法,并放入 map 中,然后到時選擇一個 Mapper ,如果符合條件就使用,否則繼續(xù)往下找。這里就有了順序的問題,因?yàn)槲以?/span> decorator.xml 中使用了
          <decorator?name="default"?page="default.jsp">

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

          ????
          </decorator>

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

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

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

          導(dǎo)航

          統(tǒng)計

          公告

          主要記錄作者在學(xué)習(xí)java中的每一步足跡。除非特別說明,所有文章均為本blog作者原創(chuàng),如需轉(zhuǎn)載請注明出處和原作者,如用于商業(yè)目的,需跟作者本人聯(lián)系。
          歡迎大家訪問:

          常用鏈接

          留言簿(16)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          java技術(shù)

          人間百態(tài)

          朋友們的blog

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 瑞安市| 西平县| 绥江县| 涞水县| 克山县| 滨海县| 灌阳县| 阳原县| 鄢陵县| 临西县| 辽宁省| 三门县| 平凉市| 弥渡县| 陆川县| 田林县| 潜山县| 怀仁县| 交城县| 昌江| 旬阳县| 温宿县| 三原县| 桓台县| 体育| 八宿县| 永泰县| 中西区| 武冈市| 乐都县| 佛冈县| 景德镇市| 沙河市| 东明县| 岐山县| 阳泉市| 南通市| 武山县| 兴和县| 呼玛县| 洪江市|