Liferay日志portlet里面的结构模板乱码问题

转自: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文件如下:
 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"也不是万能的,还是要实际问题实际 解决。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值