已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DisplayTag是一个非常好用的表格显示标签,适合MVC模式,其主页在一、最简单的情况,未使用标签标签遍历List里的每一个对象,并将对象里的所有属性显示出来。一般用于开发的时候检查对象数据的完整性。二、使用标签的情况property对应List里对象的属性(用getXXX()方法取得),title则对应表格表头里的列名。定义列有两种方式:A、使用标签里的property属性来定义B、在标签体里增加内容,可以是常量,也可以用其他标签等等两种方式比较,用property属性来定义更加快速和利于排序。三、表格显示样式的定义A、在和标签里指定标准的html属性,烦琐B、修改样式表通过class属性来指定所要应用的样式。可以在其默认样式表里(./css/screen.css)直接修改四、标签取得数据的数据源有四种范围pageScoperequestScope (默认)sessionScope 注意,这里要指定范围,非默认applicationScope五、通过增加id属性创建隐含的对象static注意到在里增加了id属性,这时就在page context里创建了一个隐含对象,指向List里的当前对象,可以通过(ListObject)pageContext.getAttribute(id)来捕获这个对象。同时还创建了一个id_rowNum对象,同样,可通过pageContext.getAttribute(testit_rowNum)来捕获,它仅仅代表当前行的行数。有了这两个隐含对象,就可以通过其他标签来访问,例如Jstl:六、显示部分数据显示开始五条数据:通过设定length属性显示第三到第八条数据:通过设定offset和length属性七、对email和url地址的直接连接如果要显示的对象里包含email和url地址,则可以在display:column里直接设定autolink=true来直接连接八、使用装饰模式转换数据显示(写自己的 decorator )A、对整个表格应用decoratororg.displaytag.sample.Wrapper即自己写的decorator,它要继承TableDecorator类,看看它的一个方法:public String getMoney()return this.moneyFormat.format(ListObject) this.getCurrentRowObject().getMoney();很明显,它通过父类的getCurrentRowObject()方法获得当前对象,然后对其getMoney()方法进行油漆B、对单独的column应用decoratororg.displaytag.sample.LongDateWrapper要实现ColumnDecorator接口,它的方法:public final String decorate(Object columnValue)Date date = (Date) columnValue;return this.dateFormat.format(date);显然,它获得不了当前对象(因为它实现的是接口),仅仅是获得该对象的columnValue,然后油漆九、创建动态连接有两种方法创建动态连接:A、在里通过增加href、paramId、paramName、paramScope、paramProperty属性href 基本的URL 地址paramId加在URL 地址后的参数名称paramName数据bean的名称,一般为null(即使用当前List里的对象)paramScope 数据bean的范围,一般为nullparamProperty数据bean的属性名称,用来填充URL 地址后的参数值这种方法简便直接,但缺点是无法产生类似details.jsp?id=xx&action=xx的复合URLB、应用decorator 创建动态连接:org.displaytag.sample.Wrapper里的方法:public String getLink1()ListObject lObject= (ListObject)getCurrentRowObject();int lIndex= getListIndex();return + lObject.getId() + ;public String getLink2()ListObject lObject= (ListObject)getCurrentRowObject();int lId= lObject.getId();return View | + Edit | + Delete;十、分页实现分页非常的简单,增加一个pagesize属性指定一次想显示的行数即可十一、排序排序实现也是很简单,在需要排序的column里增加sortable=true属性,headerClass=sortable仅仅是指定显示的样式。column里的属性对象要实现Comparable接口,如果没有的话可以应用decoratordefaultsort=1默认第一个column排序defaultorder=descending默认递减排序注意的是,当同时存在分页时排序仅仅针对的是当前页面,而不是整个List都进行排序十二、column 分组分组只是需要在column里增加group属性十三、导出数据到其他格式(页面溢出filter?)在里设定export=true在里设定media=csv excel xml pdf 决定该字段在导出到其他格式时被包不包含,不设定则都包含决定该种格式能不能在页面中导出十四、配置属性,覆盖默认两种方法:A、在程序classpath下新建perties文件B、对于单个表格,应用标签具体可配置的属性:/configuration.html十五、一个完整的例子sort=list 对整个list进行排序导出数据到其他格式时,group无效 =第二篇=DisplayTag七宗罪最近比较乱,很长时间没更新空间了,正好今天有话题,准备更新下_Display Tag Lib是一个标签库,主要用来处理jsp网页上的Table,功能非常强,可以对的Table进行分页、数据导出、分组、对列排序等等,而且使用起来非常的方便,能够大大减少代码量.记得有N多朋友问过分页问题如何可以更加方便、快速的处理,我的回答好象每次都是DisplayTag,然后步骤相同的向朋友讲它有什么功能、能减少多少编码量、发文档、如何看war例子.以至于当时都想把操作过程录下来,来降低我的口水消耗量.俗话说得好路遥知马力,经过不断的使用,感觉DisplayTag肾虚了,问题与缺陷越来越多.现在还在使用它的朋友,如果已经放弃不用,那么就别浪费时间看这个了;如果还在使用的朋友,最好能看看我总结的DisplayTag罪状,倒能弥补些缺陷,不至于问题出现时记恨在下.呵呵.1.中文翻页、排序问题:对于中文无法翻页、排序,最简单的办法是修改Tomcat下的server.xml文件.找到HTTP的Connector标签,在里面添加一项URIEncoding=.,引号里面的内容取决于你的页面编码,比如可以是GBK,UTF-8等.2.分页数据加载问题:DisplayTag的分页机制是这样的,它把所有的数据放入集合中,然后再进行分页处理.这样在数据量比较大的情况下,很容易造成性能下降或者内存超支等问题.目前解决方法有两个,一是在中增加两个属性:partialList=truesize=resultSize,每次只加再当前页数据.还有就是实现 org.displaytag.pagination.PaginatedList接口,自定义分页算法.个人推荐第二种,详细的实现方法可参考DisplayTag 1.1所带的例子.PS:第二种方法还不完善,DisplayTag中仍存在一些Bug.3.导出中文Excel问题:当导出中文列表名和中文表格数据Excel时,会产生乱码现象.解决:更改配置文件perties,使用displaytag-export-poi.jar包.更改export.excel.class=org.displaytag.export.ExcelView为export.excel.class=org.displaytag.excel.ExcelHssfView,这样可以解决中文表格数据的问题.对于中文列表名乱码的问题,必须更改org.displaytag.excel.ExcelHssfView源代码:old:HSSFCell cell = xlsRow.createCell(short) colNum+);cell.setCellValue(columnHeader);cell.setCellStyle(headerStyle);cell.setEncoding(HSSFCell.ENCODING_UTF_16);new:HSSFCell cell = xlsRow.createCell(short) colNum+);cell.setEncoding(HSSFCell.ENCODING_UTF_16);cell.setCellValue(columnHeader);cell.setCellStyle(headerStyle);还有一种通过修改编码方式来支持中文的方法,那就是将org.displaytag.export.ExcelView.java中的getMimeType()方法内容修改为return application/vnd.ms-excel;charset=GB2312;但是这样修改后,导出速度将会非常慢,呵呵.4.decorator内容无法导出问题和Html标签导出问题:如果对table进行了decorator,那么decorator后的内容将无法导出.目前此问题无法解决.所以最好不用decorator.如果显示的内容使用了html标签进行了修饰,那么它会将html标签一起导出.也是没有什么好的解决方法.5.导出Excel兼容性问题:有时会出现兼容性问题,导出的Excel在Office 2003下打不开.PS:导出问题不少,尤其是Excel.建议使用Apache POI自己实现Excel的导出.6.同页面使用多个displayTag翻页问题.DisplayTag翻页时,页面上所有的displayTag元素都翻页.解决办法:对页面中的每个表格,先判断它的记录是否为0,如果为0则不使用DisplayTag.7.未知Bug比较多:正式发布版本总是存在很多Bug.在1.1版本发布时,居然分页算法出现了明显Bug,无语.=第三篇=displayTag的应用displayTag作为当前还算得上比较流行的表现层工具插件,在sourceForge官方网站(/)上,平均每天的访问量数以万计,本文是建立在实际开发过程中 碰到的导出excel报表的实际需求,所获得的一些学习心得与技巧与大家分享. 默认的displayTag导出的Excel格式会有中文乱码,网上大部分文章都说只有改一下,org.displaytag.export.ExcelView类中, public String getMimeType() return application/vnd.ms-excel; /$NON-NLS-1$ 方法,在方法后面追加;chartset=gbk;其它不尽然,如果这样改的话在tomcat作为web服务端的话,如果列表中有中文,很慢很慢才会有导出(不过,我至今尚未在tomcat下导出过中文), 把WEB应用布署在JBOSS下面,导出的话,如果数据量大的话也会有20-40秒不等,后来到displayTag的官网上,去看它的bugtrack,发现其实不尽然。其它displayTag如果在你需要导出excel并且想自已利用apache的 POI的话,要再去到官方网上下载一个displaytag-export-poi-1.1.jar的包,详细操作请看/11/install.html 其中里面谈到,如果,每次导出的excel数据总是有缓存的话,可以在web.xml文件中加入如下配置进行过滤,这样就可以导出实时数据了。 Configure the Filter in your web.xml: ResponseOverrideFilter org.displaytag.filter.ResponseOverrideFilter And add mappings for the pages that you will intercept, for example: ResponseOverrideFilter *.do ResponseOverrideFilter *.jsp 从以上内容来看,也只是告诉你,如果要用apache的最新的POI的话,需要把displaytag-export-poi-1.1.jar从官网下载下来,放入你的工程文件中, 并没有说如何调用写自己的所需的excel的报表格式.下面就实际问题,来讨论一下如何让displayTag导出自己所需的excel格式. 在displayTag所提供的接口类中,导出自已所需的Excel有两种方式,一种是通过指定的excel模板,一种是对excel的所有的格子,一个个样式的处理, 后一种方式完全体现了“慢工出细活”的格言,而前一种方式实现起来显然要好用得多,只用读模板的样式就行了。如何调用displayTag对导出自定制的Excel文件 所提供的接口呢,请看下文,(不要急噢!_) 要调用displayTag给Poi所提供的接口操作步骤如下: 1,先要在你的appfuse工程中新建一个类,让其实现org.displaytag.export.BinaryExportView接口,其中关键的方法是 public void doExport(OutputStream out) throws JspException String captionvalue = this.model.getCaption(); / ExcelHssfView1 tempExcelView=new ExcelHssfView1(); / try / BeanUtils.setProperty(tempExcelView, action,captionvalue); / catch (IllegalAccessException e) / / TODO Auto-generated catch block / e.printStackTrace(); / catch (InvocationTargetException e) / / TODO Auto-generated catch block / e.printStackTrace(); / if (captionvalue != null) captionvalue = captionvalue.replaceAll(r)|(n)|(t), ); doExportCommon(out); else System.out.println(exec Common); doExportCommon(out); 对这个方法按照你的POI的定制excel报表的的方法,然后实现它,再把内容写入outputStream中去,基本上就可以了,当然如果有上面的 this.model.getCaption()是读取displayTag的页面标签标签中的内容,可以在不同的JSP页面放入不同的caption的值 从而判断调用不同的方法,生成不同的excel样式的报表,灵活性兼而有之. 写完以上类以后,最好先写个测试方法,用main或junit工具都成,看看你的调用poi的逻辑有没有问题。 当以上的类及方法写完后,就要在你的appfuse工程中找perties文件了,一般就在web/class/目录下,找到后,打开此文件,添加如下一段配置: export.excel.class=org.displaytag.export.excel.ExcelHssfView1 后面一段是你的新建的类的文件的路径 因为是多国语言系统,所以最好把display_perties及display_zh_Cperties都加上. 到此就完成了,使用自己的POI来在appfuse中导出指定格式样式的excel文件.先别急噢,还有更精彩的等着你。这个时候又有一个问题来了,如果你 页面想要显示某些列表字段列,而导出的excel文件中又不出现这样的字段,又该如何处理呢,嘿嘿,请接着看下文。 如果要实现以上功能请如下操作: 1,调整页面上的displayTag标签的参数值,呵,比如: ExportByCommon a href=/aaa.html?id= target=operationFrame img src=.gif title= | | display:setProperty name=export.excel.filename value=/ 注意上面用了多种配置需求,可以自已加链接,自定义导出名,自定义表头表尾,自定义是否全排序,自定义样式等,这些网上都有,就不细说了, 关键的需求点media的配置参数噢,如果media=excel表示只在excel中显示,如果media=html表示仅在页面出现,没有此参数是两个都显示噢 其它的格式也类同设置,到此displayTag的点点心得分享与大家完毕,谢谢大家花费时间分享我的快乐!_ 噢,上文提到中文问题,用POI后就解决了! =第四篇=displaytag-1.1.1之中文(乱码)解决方案1,displaytag页面的汉化:把perties考到项目里,同时复制一份perties,修改文件名displaytag_zh_CN.properties,把文件里面的对应条目改成中文即可;同时,文件里的对应两条配置注意选择合适的使用,下面是struts的配置vider=org.displaytag.localization.I18nStrutsAdapterlocale.resolver=org.displaytag.localization.I18nStrutsAdapter2,excel导出中文内容乱码:重载类org.displaytag.export.ExcelView,复写public String getMimeType() return application/vnd.ms-excel;charset=gbk; /$NON-NLS-1$原代码是return application/vnd.ms-excel; /$NON-NLS-1$修改displaytag_zh_CN.properties中对应条目:export.excel.class=yourpackage.SimpleChineseExcelView3,Excel导出文件名中文乱码:重载类org.displaytag.tags.SetPropertyTag,复写private String value;public void setValue(String propertyValue)try this.value = new String(propertyValue.getBytes(GBK),ISO-8859-1);catch(Exception e) this.value = propertyValue;super.setValue(this.value);修改displaytag.tld对应条目setProperty!- org.displaytag.tags.SetPropertyTag -yourpackage.SimpleChineseSetPropertyTag在jsp中应用时注意,这种解决方案只能解决value的中文名称,而不能解决bodycontent内的中文名称,如导出菜单.xls4,Excel导出文件名中文乱码bodycontent中的不完美解决方案这种解决方案之所以称之为不完美适应为它要借助页面中的java代码实现使用Mesources谁有好的解决方案可以回帖感激不尽Hibernate和displayTag 完美分页3步曲displaytag 中的分页对于数据量不大来说是很好的,只需要简单的配置就可以做出来强大的功能,但是要注意的是分页链接的编码问题。我们知道的,这样的分页模式在数据量大时,对于性能来说是个问题,毕竟将大量的数据一次性取出来,而用到的只有少数,不是很好的选择,而Hibernate强大的分页功能,对于我们来说再简单不过了,但是却不知道如何2者结合起来使用?下面就是一个很好的例子:只需要3部。1) Add partialList=true size=resultSize to the display tag in your jsp file like so: 2) Modify your action file by adding a method which gets the page number from the request public final class DisplayTagAction extends BaseAction public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception if (log.isDebugEnabled() log.debug(Entering execute method); TestDataManager amgr = (TestDataManager) getBean(testDataManager); /get the page number from request int page = getPage(request)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广西名校联考2025-2026学年高三上学期11月考试生物试卷
- 2025年世博分校培训考试题及答案
- 电工安全技术试题及答案
- 重庆綦江地震应急预案(3篇)
- 庐江科四考试题目及答案
- 铁路局机务笔试题库及答案
- 空间音频音乐制作-洞察与解读
- 碳纤维复合应用-洞察与解读
- 2025年技术支持专家招聘面试题库及参考答案
- 2025年民宿运营经理岗位招聘面试参考试题及参考答案
- 口腔医学技术专业职业规划
- (标准)驿站转让合同协议书样本
- 2024版电网典型设计10kV配电站房分册
- 2025年工会基础知识考试题库及参考答案
- 企业团险培训课件
- 市政工程施工配套课件
- 国际贸易部管理制度
- 嗜酸细胞性食管炎的诊断与治疗
- 呼吸系统感染健康教育
- DB13 2122-2014 洁净颗粒型煤
- 白酒委托加工合同范本
评论
0/150
提交评论