JAVA网站制作之Web开辟计划:DisplayTag使用指南
学习JAVA的目的更多的是培养自身的工作能力,我觉得工作能力的一个核心就是:独立思考能力,因为只有独立思考后,才会有自己的见解web|计划 DisplayTag是一个十分好用的表格显现标签,合适MVC形式,其主页在http://displaytag.sourceforge.net1、最复杂的情形,未利用<display:column/>标签
<%request.setAttribute("test",newReportList(6));%>
<display:tablename="test"/>
标签遍历List里的每个对象,并将对象里的一切属性显现出来。一样平常用于开辟的时分反省对象数据的完全性。
2、利用<display:column/>标签的情形
<display:tablename="test">
<display:columnproperty="id"title="ID"/>
<display:columnproperty="name"/>
<display:columnproperty="email"/>
<display:columnproperty="status"/>
<display:columnproperty="description"title="Comments"/>
</display:table>
property对应List里对象的属性(用getXXX()办法获得),title则对应表格表头里的列名。界说列有两种体例:
A、<display:columnproperty="email"/>
利用<display:column/>标签里的property属性来界说
B、<display:columntitle="email">email@it.com</display:column>
在<display:column/>标签体里增添内容,能够是常量,也能够用其他标签等等
两种体例对照,用property属性来界说加倍疾速和利于排序。
3、表格显现款式的界说
A、在<display:table/>和<display:column/>标签里指定尺度的html属性,啰嗦
B、修正款式表
<display:tablename="test"class="mars">
<display:columnproperty="id"title="ID"class="idcol"/>
<display:columnproperty="name"/>
<display:columnproperty="email"/>
<display:columnproperty="status"class="tableCellError"/>
<display:columnproperty="description"title="Comments"/>
</display:table>
经由过程class属性来指定所要使用的款式。能够在其默许款式内外(./css/screen.css)间接修正
4、标签获得数据的数据源
有四种局限
pageScope
requestScope(默许) <display:tablename="test2">
sessionScope <display:tablename="sessionScope.holder.list">注重,这里要指定局限,非默许
applicationScope
5、经由过程增添id属性创立隐含的对象
<display:tablename="test"id="testit">
<display:columnproperty="id"title="ID"/>
<display:columnproperty="name"/>
<display:columntitle="staticvalue">static</display:column>
<display:columntitle="rownumber(testit_rowNum)"><%=pageContext.getAttribute("testit_rowNum")%></display:column>
<display:columntitle="((ListObject)testit).getMoney()"><%=((ListObject)pageContext.getAttribute("testit")).getMoney()%></display:column>
</display:table>
注重到在<display:table/>里增添了id属性,这时候就在pagecontext里创立了一个隐含对象,指向List里确当前对象,
能够经由过程(ListObject)pageContext.getAttribute("id")来捕捉这个对象。同时还创立了一个id_rowNum对象,一样,可
经由过程pageContext.getAttribute("testit_rowNum")来捕捉,它仅仅代表以后行的行数。
有了这两个隐含对象,就能够经由过程其他标签来会见,比方Jstl:
<display:tableid="row"name="mylist">
<display:columntitle="rownumber">
<c:outvalue="${row_rowNum}"/>
</display:column>
<display:columntitle="name">
<c:outvalue="${row.first_name}"/>
<c:outvalue="${row.last_name}"/>
</display:column>
</display:table>
6、显现部分数据
显现入手下手五条数据:经由过程设定length属性
<display:tablename="test"length="5">
<display:columnproperty="id"title="ID"/>
<display:columnproperty="email"/>
<display:columnproperty="status"/>
</display:table>
显现第三到第八条数据:经由过程设定offset和length属性
<display:tablename="test"offset="3"length="5">
<display:columnproperty="id"title="ID"/>
<display:columnproperty="email"/>
<display:columnproperty="status"/>
</display:table>
7、对email和url地点的间接毗连
<display:tablename="test">
<display:columnproperty="id"title="ID"/>
<display:columnproperty="email"autolink="true"/>
<display:columnproperty="url"autolink="true"/>
</display:table>
假如要显现的对象里包括email和url地点,则能够在display:column里间接设定autolink="true"来间接毗连
8、利用粉饰形式转换数据显现(写本人的decorator)
A、对全部表格使用decorator
<display:tablename="test"decorator="org.displaytag.sample.Wrapper">
<display:columnproperty="id"title="ID"/>
<display:columnproperty="email"/>
<display:columnproperty="status"/>
<display:columnproperty="date"/>
<display:columnproperty="money"/>
</display:table>
org.displaytag.sample.Wrapper即本人写的decorator,它要承继TableDecorator类,看看它的一个办法:
publicStringgetMoney()
{
returnthis.moneyFormat.format(((ListObject)this.getCurrentRowObject()).getMoney());
}
很分明,它经由过程父类的getCurrentRowObject()办法取得以后对象,然后对其getMoney()办法举行‘油漆’
B、对独自的column使用decorator
<display:tablename="test">
<display:columnproperty="id"title="ID"/>
<display:columnproperty="email"/>
<display:columnproperty="status"/>
<display:columnproperty="date"decorator="org.displaytag.sample.LongDateWrapper"/>
</display:table>
org.displaytag.sample.LongDateWrapper要完成ColumnDecorator接口,它的办法:
publicfinalStringdecorate(ObjectcolumnValue)
{
Datedate=(Date)columnValue;
returnthis.dateFormat.format(date);
}
明显,它取得不了以后对象(由于它完成的是接口),仅仅是取得该对象的columnValue,然后‘油漆’
9、创立静态毗连
有两种办法创立静态毗连:
A、在<display:column/>里经由过程增添href、paramId、paramName、paramScope、paramProperty属性
href 基础的URL地点
paramId 加在URL地点后的参数称号
paramName 数据bean的称号,通常是null(即便用以后List里的对象)
paramScope 数据bean的局限,通常是null
paramProperty 数据bean的属性称号,用来添补URL地点后的参数值
<display:tablename="sessionScope.details">
<display:columnproperty="id"title="ID"href="details.jsp"paramId="id"/>
<display:columnproperty="email"href="details.jsp"paramId="action"paramName="testparam"paramScope="request"/>
<display:columnproperty="status"href="details.jsp"paramId="id"paramProperty="id"/>
</display:table>
这类办法烦琐间接,但弱点是没法发生相似details.jsp?id=xx&action=xx的复合URL
B、使用decorator创立静态毗连:
<display:tablename="sessionScope.details"decorator="org.displaytag.sample.Wrapper">
<display:columnproperty="link1"title="ID"/>
<display:columnproperty="email"/>
<display:columnproperty="link2"title="Actions"/>
</display:table>
org.displaytag.sample.Wrapper里的办法:
publicStringgetLink1()
{
ListObjectlObject=(ListObject)getCurrentRowObject();
intlIndex=getListIndex();
return"<ahref="details.jsp?index="+lIndex+"">"+lObject.getId()+"</a>";
}
publicStringgetLink2()
{
ListObjectlObject=(ListObject)getCurrentRowObject();
intlId=lObject.getId();
return"<ahref="details.jsp?id="+lId
+"&action=view">View</a>|"
+"<ahref="details.jsp?id="+lId
+"&action=edit">Edit</a>|"
+"<ahref="details.jsp?id="+lId
+"&action=delete">Delete</a>";
}
10、分页
完成分页十分的复杂,增添一个pagesize属性指定一次想显现的行数便可
<display:tablename="sessionScope.test"pagesize="10">
<display:columnproperty="id"title="ID"/>
<display:columnproperty="name"/>
<display:columnproperty="email"/>
<display:columnproperty="status"/>
</display:table>
11、排序
排序完成也是很复杂,在必要排序的column里增添sortable="true"属性,headerClass="sortable"仅仅是
指定显现的款式。column里的属性对象要完成Comparable接口,假如没有的话能够使用decorator
defaultsort="1" 默许第一个column排序
defaultorder="descending" 默许递加排序
<display:tablename="sessionScope.stest"defaultsort="1"defaultorder="descending">
<display:columnproperty="id"title="ID"sortable="true"headerClass="sortable"/>
<display:columnproperty="name"sortable="true"headerClass="sortable"/>
<display:columnproperty="email"/>
<display:columnproperty="status"sortable="true"headerClass="sortable"/>
</display:table>
注重的是,当同时存在分页时排序仅仅针对的是以后页面,而不是全部List都举行排序
12、column分组
分组只是必要在column里增添group属性
<display:tablename="test"class="simple">
<display:columnproperty="city"title="CITY"group="1"/>
<display:columnproperty="project"title="PROJECT"group="2"/>
<display:columnproperty="amount"title="HOURS"/>
<display:columnproperty="task"title="TASK"/>
</display:table>
十3、导出数据到其他格局(页面溢出filter??)
在<display:table/>里设定export="true"
在<display:column/>里设定media="csvexcelxmlpdf"决意该字段在导出到其他格局时被包不包括,不设定章都包括
<display:setPropertyname="export.csv"value="false"/>
决意该种格局能不克不及在页面中导出
<display:tablename="test"export="true"id="currentRowObject">
<display:columnproperty="id"title="ID"/>
<display:columnproperty="email"/>
<display:columnproperty="status"/>
<display:columnproperty="longDescription"media="csvexcelxmlpdf"title="NotOnHTML"/>
<display:columnmedia="csvexcel"title="URL"property="url"/>
<display:setPropertyname="export.pdf"value="true"/>
<display:setPropertyname="export.csv"value="false"/>
</display:table>
十4、设置属性,掩盖默许
两种办法:
A、在程序classpath下新建displaytag.properties文件
B、关于单个表格,使用<display:setProperty>标签
详细可设置的属性:http://displaytag.sourceforge.net/configuration.html
十5、一个完全的例子
<display:tablename="test"export="true"sort="list"pagesize="8">
<display:columnproperty="city"title="CITY"group="1"sortable="true"headerClass="sortable"/>
<display:columnproperty="project"title="PROJECT"group="2"sortable="true"headerClass="sortable"/>
<display:columnproperty="amount"title="HOURS"/>
<display:columnproperty="task"title="TASK"/>
</display:table>
sort="list"对全部list举行排序
导出数据到其他格局时,group有效
比如模式、敏捷方法什么的,这些思想好,但是实施的人没有理解而且没有正确运用这些知识导致了开发周期的延长。比如说对象,通过getName()方法不能获取对象的名字。 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。 那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧! 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 是一种语言,用以产生「小应用程序(Applet(s)) 是一种将安全性(Security)列为第一优先考虑的语言 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
页:
[1]