转自: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文件头部没有包含任何字符编码文件,例如:
由此问题引发思考:
在编码过程中,几乎所有的乱码问题都是因为字符编码的设置问题,所以在遇到有乱码的情况下,首先要想到的就是检查编码 方式的设置,是否国际化?这可能是解决乱码问题的特定的解决思路。当然我们也由此发现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文件头部没有包含任何字符编码文件,例如:
<?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文件是如下初始定义的:
<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>
<?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文件如下:<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>
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 >
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"也不是万能的,还是要实际问题实际 解决。