|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
学习JAVA的目的更多的是培养自身的工作能力,我觉得工作能力的一个核心就是:独立思考能力,因为只有独立思考后,才会有自己的见解web|计划 DisplayTag是一个十分好用的表格显现标签,合适MVC形式,其主页在http://displaytag.sourceforge.net
1、最复杂的情形,未利用<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()方法不能获取对象的名字。 |
|