displaytag 中文问题

原创 2007年09月30日 15:52:00

display tag 在显示数据库编码为非GBK时会出现乱码,现用两种方式解决

1.修改原码:

修改文件org.displaytag.model.column文件中以下行

 

 public Object getValue(boolean decorated) throws ObjectLookupException, DecoratorException
    
{

        Object 
object = null;

        
// a static value has been set?
        if (this.cell.getStaticValue() != null)
        
{
            
object = this.cell.getStaticValue();
        }

        
else if (this.header.getBeanPropertyName() != null)
        
{

            
// if a decorator has been set, and if decorator has a getter for the requested property only, check
            
// decorator
            if (decorated
                
&& this.row.getParentTable().getTableDecorator() != null
                
&& this.row.getParentTable().getTableDecorator().hasGetterFor(this.header.getBeanPropertyName()))
            
{

                
object = LookupUtil.getBeanProperty(this.row.getParentTable().getTableDecorator(), this.header
                    .getBeanPropertyName());
            }

            
else
            
{
                
// else check underlining object
                object = LookupUtil.getBeanProperty(this.row.getObject(), this.header.getBeanPropertyName());
                
                
// 20070924,这里是将原码进行转换
               /try {
                    
if(object instanceof String) {
                        
object = new String(((String)object).getBytes("ISO8859_1"),"GBK");
                    }

                }
 catch (UnsupportedEncodingException e) {
                    
object = LookupUtil.getBeanProperty(this.row.getObject(), this.header.getBeanPropertyName());
                }

            }

        }

方法二

 

增加decorater,如下

package com.mycompany.common.displaytag.wrap;

import java.io.UnsupportedEncodingException;

import org.displaytag.decorator.ColumnDecorator;
import org.displaytag.exception.DecoratorException;

public class Encode2GB implements ColumnDecorator{

    
public final String decorate(Object columnValue) throws DecoratorException {
        
// TODO Auto-generated method stub

        
try {
            
return new String(((String)columnValue).getBytes("ISO8859_1"), "GBK");
        }
 catch (UnsupportedEncodingException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
            
return null;
        }


    }


}

关在页面中增加以下

 

<display:table name="test">
    
<display:column property="id" title="ID" />
    
<display:column property="name" group="2" decorator="com.mycompany.common.displaytag.wrap.Encode2GB"/>
    
<display:column property="email" />
    
<display:column property="status" />
    
<display:column property="description" title="Comments" />
  
</display:table>

这样就可以正确显示中文了

总结:display从数据库中取出时并不进行转换编码,所以,我们需要进行转换,一种方式是修改其原码;另一各是

增加一个decorator方式,但对于前者,危险系统比较大,后者较安全,也更合理。

ps: 如果增加一个标签:如 srcEncode=??? desEncode=???这样的话,可以不再编写deocoader方式,更方便一些,如有兴趣,读者不妨试试,我也会在近期推出我的研究。

 

相关文章推荐

displaytag 中文问题 探索日志 注释

重新上路: displayTagSupport库中: itext-1.3.jar commons-lang-2.6.jar standard.jar commons-beanutils-...

displaytag分页中文处理

displaytag参考: http://blog.sina.com.cn/s/blog_6b184a840100lavn.html http://www.knowsky.com/1045905....

displaytag 插件 中文提示

  • 2009年04月23日 09:16
  • 200KB
  • 下载

displaytag 中文包

  • 2009年04月17日 14:41
  • 208KB
  • 下载

DisplayTag详解

DisplayTag详解 Posted on 2010-08-17 11:36 chinaifne 阅读(1904)评论(0)  编辑收藏 【简介Introduction】 Displa...
  • I_buntu
  • I_buntu
  • 2011年09月29日 14:13
  • 592

DisplayTag学习笔记

这几天学习这个标签的运用,只是刚刚入门,学习的过程中碰到了很多问题,问题就是网上的帖子10个八个都是一样的,然后出了一点问题就找半天,现在写一下自己学习中帮助自己的一点东西; /***********...

DisplayTag汉化

1.在SRC下新建displaytag.properties,名字不要写错 2.将下面的代码复制到displaytag.properties中保存(这里的编码格式都是用的unicode) pagi...

DisplayTag用法小结

DisplayTag是一个非常好用的表格显示标签,适合MVC模式,其主页在http://displaytag.sourceforge.net    一、最简单的情况,未使用标签          ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:displaytag 中文问题
举报原因:
原因补充:

(最多只允许输入30个字)