Shuffy

不断的学习,不断的思考,才能不断的进步.Let's do better together!
posts - 102, comments - 43, trackbacks - 0, articles - 19

DisplayTag应用实践

Posted on 2008-11-30 15:47 Shuffy 阅读(4870) 评论(0)  编辑 收藏 引用 所属分类: Java
[摘自]http://www.blogjava.net/huhu/archive/2005/06/07/5669.html
1.表格的显示格式,在css中定义;

css

Property Default Valid Values Description Can be set using file/setProperty
 css.tr.even even any valid css class name css class automatically added to even rows             yes/yes
 css.tr.odd odd any valid css class name css class automatically added to odd rows             yes/yes
css.th.sorted sorted any valid css class name css class automatically added to the header of sorted columns             yes/yes
css.th.ascending order1 any valid css class name css class automatically added to the header of a column sorted is ascending order            yes/yes
css.th.descending order2 any valid css class name css class automatically added to the header of a column sorted is descending order            yes/yes
css.table none any valid css class name css class automatically added to the main table tag            yes/yes
css.th.sortable none any valid css class name css class automatically added to any sortable column            yes/yes

 


 
2.修改classes/org/displaytag/properties/TableTag.properties,使其符合自己的要求.
basic.empty.showtable=false
basic.show.header
=true

# page 
| list
sort.amount
=page

export.amount
=list
export.decorated
=true

paging.banner.group_size
=8
paging.banner.placement
=top


css.tr.even
=even
css.tr.odd
=odd
css.th.sorted
=sorted
css.th.ascending
=order1
css.th.descending
=order2
css.table
=
css.th.sortable
=sortable

# factory classes 
for extensions
factory.requestHelper
=org.displaytag.util.DefaultRequestHelperFactory

# locale provider (Jstl provider by 
default)
locale.provider
=org.displaytag.localization.I18nJstlAdapter

# locale.resolver (nothing by 
default, simply use locale from request)
#locale.resolver
=

export.types
=csv excel xml pdf

export.csv.
class=org.displaytag.export.CsvView
export.excel.
class=org.displaytag.export.ExcelView
export.xml.
class=org.displaytag.export.XmlView
export.pdf.
class=org.displaytag.export.PdfView

export.csv
=true
export.csv.label
=<span class="export csv">CSV </span>
export.csv.include_header
=false
export.csv.filename
=

export.excel
=true
export.excel.label
=<span class="export excel">Excel </span>
export.excel.include_header
=true
export.excel.filename
=

export.xml
=true
export.xml.label
=<span class="export xml">XML </span>
export.xml.filename
=

export.pdf
=false
export.pdf.label
=<span class="export pdf">PDF </span>
export.pdf.include_header
=true
export.pdf.filename
=


# messages

basic.msg.empty_list
=<center>对不起,没有符合条件的记录</center>
basic.msg.empty_list_row
=<tr class="empty"><td colspan="{0}">Nothing found to display.</td></tr>
error.msg.invalid_page
=invalid page

export.banner
=<div class="exportlinks">Export options: {0}</div>
export.banner.sepchar
= |

paging.banner.item_name
=记录
paging.banner.items_name
=记录

paging.banner.no_items_found
=<span class="pagebanner">没有任何{0} .</span>
paging.banner.one_item_found
=<span class="pagebanner">搜索到1条{0} .</span>
paging.banner.all_items_found
=<span class="pagebanner">搜索到<b>{0}</b>{1}, 当前显示全部{2}.</span>
paging.banner.some_items_found
=<span class="pagebanner">搜索到<b>{0}</b>{1} , 当前显示<b>{2}</b> to <b>{3}</b>.</span>

paging.banner.full
=<span class="pagelinks">[<a href="{1}">首页</a>/<a href="{2}">上一页</a>{0} [<a href="{3}">下一页</a>/<a href="{4}">末页</a>]</span>
paging.banner.first
=<span class="pagelinks">[首页/上一页] {0} [<a href="{3}">下一页</a>/<a href="{4}">末页</a>]</span>
paging.banner.last
=<span class="pagelinks">[<a href="{1}">首页</a>/<a href="{2}">上一页</a>{0} [下一页/末页]</span>
paging.banner.onepage
=<span class="pagelinks">{0}</span>

paging.banner.page.selected
=<strong>{0}</strong>
paging.banner.page.link
=<a href="{1}" title="Go to page {0}">{0}</a>
paging.banner.page.separator
=,

# unused
save.excel.banner
=<a href="{0}" rel="external">save ({1} bytes)</a>
save.excel.filename
=export.xls




详情http://displaytag.sourceforge.net/configuration.html
3.如果TableTag.properties中的相关项包含中文则在web页上会出现乱码,解决方法:下载源码
修改 org.displaytag.properties.TableProperties.java ,把 

   
 private String getProperty(String key) 
    

      
return this.properties.getProperty(key); 
    }
 


改成 
   
private String getProperty(String key) 
    

        String s 
= null
        
try 
          s 
= new String(this.properties.getProperty(key).getBytes("8859_1"), "GBK"); 
        }
catch(Exception e) 
          s 
= null
        }
 
      
return s; 
    }
 
4.确保export正确的方法是在web.xml中配置filter:
<filter> 
    
<filter-name>ResponseOverrideFilter</filter-name> 
    
<filter-class>org.displaytag.filter.ResponseOverrideFilter</filter-class> 
</filter> 
<filter-mapping> 
    
<filter-name>ResponseOverrideFilter</filter-name> 
    
<url-pattern>*.jsp</url-pattern> 
</filter-mapping> 
详倾参见http://displaytag.sourceforge.net/export.html
慎用这个filter,尤其是使用tomcat做服务器的朋友,它会使本来就存在的乱码问题更加杂乱,除非改改源码.
5.在jstl中获得数据的方法:
<sql:query var="query" dataSource="${bookdev}"> 
  select 
*  from ebook 
</sql:query> 

<display-el:table name="pageScope.query.rows" /> 

用<display-el:table name="${query.rows}" />好像不行;
6.要在外部引用数据,必须在display:table中定义一个id

<display-el:table name="pageScope.query.rows" id="item" > 
  
<display-el:column property="title" title="题名" group="1" sortable="true" headerClass="sortable"/> 
  
<display-el:column property="creator" title="作者" group="2" sortable="true" headerClass="sortable"/> 
  
<display-el:column property="format" title="格式"/> 
  
<display-el:column title="删除"><a href="delete.jsp?id=${item.Id}" target="_blank">删除</a></display-el:column> 
</display-el:table> 

7.问题:如果检索数据库带有中文的字段,在翻页时就查不到记录了?
  这个问题着实把我吓了一大条,因为工程马上就要完了,要是它出了问题,那.....
 好在displaytag比较成熟,用的人比较多,早就有人提出这个问题了,在网上查了一下,原来又是一个编码的问题:
"DisplayTag的默认的URL默认为上一次的URL,如果上一次的URL包含中文的话,则会被进行URLEncode,所以在翻页的时候,又会把进行了URLEncode后的数据再次进行URLEncode,所以翻页就没有数据,因为这部分功能被封装在DisplayTag中"
也提出了解决办法:在Tomcat的server.xml的Connector部分添加URIEncoding="GBK",
我试了,但是好像不管用,不知道是不是版本不同的缘故,我用的是jakarta-tomcat-5.0.27,应该是比较新的.
考虑到Tomcat5中对Post和Get请求不再采用相同的处理策略,
我把查询表单的form method 由原来的post改为get,翻页就没有问题了,不过这个方法好像蹩脚了点,只能暂时这样了.
在后来的实践中我才发现原来是配置了filter的缘故(见4.确保export正确的方法是在web.xml中配置filter),这个filter打乱了正常的编码.
下面是我的一些测试: (配置了export的filter后)
send.jsp:
<form action="receive.jsp?cs=1" method="POST">
  <input name="key" type="text" value="中文" />
  <input name="sb" value="submit" type="submit"/>
</form>
receive.jsp:cs=${param.cs};key=${param.key}
结果:cs=1,但key=????即使前面用了<%request.setCharacterEncoding("GBK"); %>也不行
只有用<% String key = new String(request.getParameter("key").getBytes("ISO-8859-1"));out.println(key);%>或类似的编码处理才能得到正确结果.
将send.jsp的form method改为get
结果:cs的值为null,key=中文
8.相关资源:
http://www.theserverside.com/news/thread.tss?thread_id=21861


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理