转自:http://www.blogjava.net/Scott/archive/2007/07/13/130026.html
在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文件如下:
由此问题引发思考:
在编码过程中,几乎所有的乱码问题都是因为字符编码的设置问题,所以在遇到有乱码的情况下,首先要想到的就是检查编码 方式的设置,是否国际化?这可能是解决乱码问题的特定的解决思路。当然我们也由此发现encoding="UTF-8"也不是万能的,还是要实际问题实际 解决。
在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文件头部没有包含任何字符编码文件,例如:
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
1
<?
xml version="1.0"
?>
2![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
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
>
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
2
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
3
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
4
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
5
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
6
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
7
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
8
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
9
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
10
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
11
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
12
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
13
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
14
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
15
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
16
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
17
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
18
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
19
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
20
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
21
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
22
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
23
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
24
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
25
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
26
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
27
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
28
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
由此问题引发思考:
在编码过程中,几乎所有的乱码问题都是因为字符编码的设置问题,所以在遇到有乱码的情况下,首先要想到的就是检查编码 方式的设置,是否国际化?这可能是解决乱码问题的特定的解决思路。当然我们也由此发现encoding="UTF-8"也不是万能的,还是要实际问题实际 解决。