Scott Zone
似水流年,勤勉无价
BlogJava
首页
新随笔
联系
聚合
管理
posts - 27, comments - 14, trackbacks - 0
Liferay日志portlet里面的结构模板乱码问题
在Liferay里面,有很多内置的示例portlet,这为我们在EXT环境下做二次开发新的portlet提供很好的参考依据,其中CMS模块里的日志文章portlet,功能尤为强大,可以通过配置Structure和Template可以很容易实现一些新闻或是其他内容版面,写好基本的Structure、Template *.XSL文件,可以通过扩展,再复杂的页面都可以通过配置模板实现,这为发布新闻信息提供了非常方便的解决方案。下面我将自己在项目中遇到的几个问题简单记录一下:(好记性敌不过烂笔头啊,哈哈,再说我的记性本来就不好~~)
1、liferay4.3 final版本中新建结构、模板、文章过程中,编号似乎只能是自动生成,如果自己定义就报错,不知道是不是我定义的编号不符合liferay的内部约束,没仔细研究,这应该不是大问题,自动生成也没什么不好。在以前的版本liferay4.2.2是可以自己定义编号的。
2、在定义结构时,最好直接通过发射编辑写XSL文件的方式来实现,如果是自己通过点击增加行的方式,需要自己定义属性名,这些属性名在后面定义模板的时候需要用到,而且应该保持一致,所以通过定义XSL文件保持原sample(以前的文章中有提供下载)中提供的那些基本结构,可以避免在定义模板时引起不必要的麻烦。
*3*、解决使用已经定义好的结构模板配置的文章出现乱码的问题:
在liferay4.2.2中利用提供的结构和模板定义,配置多种结构的文章都没出现任何乱码的问题,但将原来的那些基础模板应用到4.3版本中,就出现了乱码的问题,刚开始很不解,结构和模板都是原系统中摘取下来的,不可能出错的啊?后来通过对比才知道,老版本的模板.XSL文件头部没有包含任何字符编码文件,例如:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:variable name="link_value">
<xsl:value-of disable-output-escaping="yes" select="root/dynamic-element[@name='textarea']/dynamic-content"/>
</xsl:variable>
<center>
<a border="0">
<xsl:attribute name="href">
<xsl:text>http://</xsl:text>
<xsl:value-of disable-output-escaping="yes" select="$link_value"/>
</xsl:attribute>
<img border="0">
<xsl:attribute name="src">
<xsl:value-of disable-output-escaping="yes" select="root/dynamic-element[@name='image']/dynamic-content"/>
</xsl:attribute>
</img>
</a>
</center>
<br/>
</xsl:template>
</xsl:stylesheet>
他是在系统运行过程中,自适应系统浏览器的字符编码方式,所以在原来版本都是正常的,但新版本中,模板的.XSL文件是如下初始定义的:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" omit-xml-declaration="yes"/>
<xsl:template match="/">
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr>
<td>
<div style="float: right; position: relative; padding-left: 10px;">
<img>
<xsl:attribute name="src">
<xsl:value-of disable-output-escaping="yes" select="root/dynamic-element[@name='image']/dynamic-content"/>
</xsl:attribute>
</img>
</div>
<xsl:if test="root/dynamic-element[@name='textarea']/dynamic-content != ''">
<xsl:value-of disable-output-escaping="yes" select="root/dynamic-element[@name='textarea']/dynamic-content"/>
</xsl:if>
</td>
</tr>
<tr>
<td>
<br/>
</td>
</tr>
</table>
</xsl:template>
</xsl:stylesheet>
它加入了
encoding="UTF-8"的声明,问题就在这里,当系统浏览器的编码方式与此不同时,乱码当然也就出来了,尝试去掉encoding="UTF-8"的包含,再刷新原文章,问题仍然存在。再返回该模板.XSL文件检查代码,又尝试在
<xsl:output method="html" omit-xml-declaration="yes"/>加入encoding="gb2312",然后保存刷新,哇塞,乱码不见了,问题得到解决。新的模板.XSL文件如下:
1
<?
xml version="1.0"
?>
2
3
<
xsl:stylesheet
xmlns:xsl
="http://www.w3.org/1999/XSL/Transform"
version
="1.0"
>
4
<
xsl:output
method
="html"
omit-xml-declaration
="yes"
encoding
="gb2312"
/>
5
<
xsl:template
match
="/"
>
6
<
table
cellpadding
="0"
cellspacing
="0"
border
="0"
width
="100%"
>
7
<
tr
>
8
<
td
>
9
<
div
style
="float: right; position: relative; padding-left: 10px;"
>
10
<
img
>
11
<
xsl:attribute
name
="src"
>
12
<
xsl:value-of
disable-output-escaping
="yes"
select
="root/dynamic-element[@name='image']/dynamic-content"
/>
13
</
xsl:attribute
>
14
</
img
>
15
</
div
>
16
<
xsl:if
test
="root/dynamic-element[@name='textarea']/dynamic-content != ''"
>
17
<
xsl:value-of
disable-output-escaping
="yes"
select
="root/dynamic-element[@name='textarea']/dynamic-content"
/>
18
</
xsl:if
>
19
</
td
>
20
</
tr
>
21
<
tr
>
22
<
td
>
23
<
br
/>
24
</
td
>
25
</
tr
>
26
</
table
>
27
</
xsl:template
>
28
</
xsl:stylesheet
>
由此问题引发思考:
在编码过程中,几乎所有的乱码问题都是因为字符编码的设置问题,所以在遇到有乱码的情况下,首先要想到的就是检查编码方式的设置,是否国际化?这可能是解决乱码问题的特定的解决思路。当然我们也由此发现encoding="UTF-8"也不是万能的,还是要实际问题实际解决。
posted on 2007-07-13 11:19
Scott.Pan
阅读(1081)
评论(0)
编辑
收藏
所属分类:
Liferay
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
菜单式下拉列表
Liferay日志portlet里面的结构模板乱码问题
Java Content Repository API 简介
SearchContainer的用法说明
Portlet学习分析笔记
Liferay项目中问题及解决方法列举
liferay中的结构模板介绍(liferay 4.2.2)
<
2007年7月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(4)
给我留言
查看公开留言
查看私人留言
随笔分类
Database
IM例举(1)
J2EE(2)
JBPM(1)
Liferay(7)
SSH(2)
Web开发
代码收藏夹(7)
生活记事(6)
目录服务(3)
随笔档案
2007年8月 (5)
2007年7月 (22)
搜索
最新评论
1. re: Portlet学习分析笔记[未登录]
来学习一下
--zz
2. re: 几种js实现的动态多文件上传
最后一种不能用
--11
3. re: insertAdjacentHTML方法示例[未登录]
1
--1
4. re: Portlet学习分析笔记
写的很不错。学习了
--chailieyang
5. re: insertAdjacentHTML方法示例
评论内容较长,点击标题查看
--啊打发
阅读排行榜
1. insertAdjacentHTML方法示例(23430)
2. 经典英语200句(4356)
3. Portlet学习分析笔记(3608)
4. SearchContainer的用法说明(2788)
5. 几种js实现的动态多文件上传(2759)
评论排行榜
1. Portlet学习分析笔记(4)
2. insertAdjacentHTML方法示例(2)
3. 几种js实现的动态多文件上传(1)
4. 经典英语200句(1)
5. Liferay项目中问题及解决方法列举(1)