2007年3月11日

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 方法却始终不调用,一时想不出办法。看到篇文章说不自己写 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 @ 2007-03-11 22:54 pesome 阅读(2188) | 评论 (0)编辑 收藏

中文问题的解决

这次给 openfans 做网摘功能,主体程序倒是很快就写完了,另外要做个 IE 插件,却碰到了不少问题。 IE 插件其实很简单,就是用 js 获得页面的标题、 url 和选择的内容,然后通过弹出窗口,将其送到服务器。这里就有中文的问题了,开始使用 escape ,如 escape(title) 形式, request.getParameter 碰到中文就为 null ,网上搜了一通,说是可以通过 java 编码搞定,但拿到就为 null 了,还怎么换编码?忙活了好几个小时,又是 alert ,又是 document.write ,看上去也没什么问题。不 escape ,直接在浏览器中输入带中文的 url ,拿到的不为 null 了,拿到后,通过 new String(str.getBytes("ISO-8859-1"), "UTF-8"); 还真显示正常了。但用 window.open 又出乱码了。看到文章说还有 encodeURIComponent 方法可用,就试了下,把 escape 换成 encodeURIComponent 居然搞定了,服务端还是得用 new String(str.getBytes("ISO-8859-1"), "UTF-8") 进行处理。注意这里用的 tomcat ,它的默认编码就是 "ISO-8859-1" ,如果改了编码程序也得做相应的改动了。

posted @ 2007-03-11 22:51 pesome 阅读(441) | 评论 (0)编辑 收藏

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

导航

统计

公告

主要记录作者在学习java中的每一步足迹。除非特别说明,所有文章均为本blog作者原创,如需转载请注明出处和原作者,如用于商业目的,需跟作者本人联系。
欢迎大家访问:

常用链接

留言簿(10)

随笔分类

随笔档案

文章分类

文章档案

相册

收藏夹

java技术

人间百态

朋友们的blog

搜索

最新评论

阅读排行榜

评论排行榜