posts - 27,  comments - 14,  trackbacks - 0
在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

只有注册用户登录后才能发表评论。


网站导航:
 
<2007年7月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(4)

随笔分类

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜