??xml version="1.0" encoding="utf-8" standalone="yes"?>
1. ValueListInfo 装Map对象Q含有排序、分c聚焦和提交表单{相关信?br />2. ValueListHandler接口Q实现类QDefaultValueListHandlerImpl 它是ValueList中的核心c,其定义在配置文g?调用getValueListҎ(gu)q回ValueList对象
3. ValueList接口Q实现类QDefaultListBackedValueList 它包含两个对象,1Q域对象的结果集Q?QValueListInfo对象
4. ValueListAdapter接口Q有以下几种实现
?DefaultWrapperAdapter jdbc操作的适配?br /> ?EventLogAdapter 日志操作的适配?br /> ?FileSystemAdapter 文gpȝ操作的适配?br /> ?HibernateAdapter hibernate操作的适配?br /> ?MappingSqlQueryAdapter iBATIS的sqlMap适配?br />
具体实现程
W一步:从请求中构造ValueListInfo对象Q由帮助cValueListRequestUtil实现
从请求中取得URL的参数和pȝ默认值来构造ValueListInfo对象
W二步:得到Adapter的实现类
调用getBeanҎ(gu)Q从配置文g中取得ValueListHandler实现c,调用getValueListҎ(gu)Q得到实体key对应的AdapterQ如Q?br /> <bean class="net.mlw.vlh.adapter.hibernate3.HibernateAdapter">
<property name="sessionFactory"><ref bean="mySessionFactory"/></property>
<property name="defaultNumberPerPage"><value>10</value></property>
<property name="defaultSortColumn"><value>messageIn.date</value></property>
<property name="defaultSortDirection"><value>desc</value></property>
<property name="hql">
<value>
from User AS vo
/~certNumber: where vo.certNumber like {certNumber} ~/
/~name: where vo.name like {name} ~/
/~certHolder: where vo.certHolder like {certHolder} ~/
/~groupName: where vo.group.name like {groupName} ~/
/~sortColumn: ORDER BY vo.[sortColumn] [sortDirection]~/
</value>
</property>
<property name="defaultFocusPropertyObjectAlias"><value>vo</value></property>
<property name="maxRowsForFocus"><value>160000</value></property>
<property name="removeEmptyStrings"><value>true</value></property>
</bean>
W三步:构造ValueList对象Q用DefaultListBackedValueList实现c?br /> 用适配器取得结果集Q如HibernateAdapterQ?装ValueList对象
ValueList中包含两个对象,1Q域对象的结果集Q?QValueListInfo对象Q分늚相关息)
W四步:把ValueList对象攑ֈWEB的作用域?/p>
HQL说明Q主要通过q代动态生成HQL语句
from User AS vo
/~certNumber: where vo.certNumber like {certNumber} ~/ (1)
/~name: where vo.name like {name} ~/ (2)
/~certHolder: where vo.certHolder like {certHolder} ~/ (3)
/~groupName: where vo.group.name like {groupName} ~/ (4)
/~sortColumn: ORDER BY vo.[sortColumn] [sortDirection]~/ (5)
Q?Q如果ValueListInfo中包含certNumber变量Q如certNumber=100Q则vo.certNumber like=100Q生成HQL=from User AS vo where vo.certNumber like=100Q?br /> 如果ValueListInfo中不包含certNumber变量Q生成HQL=from User AS vo (1)行由I白代替
其它以此cL
注意Q传lHQL的每个变量都要单独占一行,q是类似between and 的语句也要分两行?br />
1.vlh:root root标签做ؓ所有vlh标签的根标签.
1)value 在给定的范围内,包含在ValueList或list的变量名. List的实例自动被DefaultListBackedValueList包装在ValueList?BR> 2)id 如果有多个表被包含在一个request中,ID属性能区分每个表。id被追加到所有的parameters中?BR> 例如Q表ID=(blob)Q那么分参C包?paggingColumn=firstName(bob)Q没有ID指定Ӟ使用默认ID?BR> 当在WEB中用ValueListHandlerHelperӞID用来构徏list中的信息Q因此要在application中指定唯一的ID
3)url q回的URLQ在表生成后所有的q接自动生成Q只有action标签可以被覆?BR> 例:<vlh:root id="MyTable" value="list" url="userAction.do?" includeParameters="*" >
所有的链接?"?"起始. l果像下面这?
<a href="userAction.do?param1=value1&....¶mN=valueN" >
4)configName ValueListConfigBean 的id? 它的名称被定义在spring的配|文件中,用来格配|风?一?nbsp; 情况我更愿意使用table的class属性配|风根{valueList为class也指定了三种风格classicLook、microsoftLook、simpleLook.是以三个properties文g形式提供?BR>
2.vlh:row q是一个P代标{? q个标签q代在ValueList中对象的属?/STRONG>
1Qbean 在P代标{上使用pageContext的key?BR> 假设我们有一个类Player有getIdҎ(gu)
<vlh:row bean="player">
使用EL语言Q显CPlayer的id?${player.id}.
</vlh:row>
2)display 指定要显C的adpater?在configuration bean中定?Q默认是html,q有cvs,excel{?BR>
3.vlh:column 昄每一列的?BR> 例:<vlh:column title="Id of Player" property="id" sortable="desc" emphasisPattern="1"/>
昄列,标题?Id of Player"Q显Cid属性的|如果g包含"1" ,被高亮昄
1Qsortable 是否排序.
asc 升序排列. desc 降序排列
2Qproperty 在adapter中得到javabean的属性名
3) groupKey 为列指定groupKey|该列相同的数据合qӞ其余为空?BR> 4) format 格式化number,java.util.date or Calendarcd数据。用WEB览器的locale做ؓ默认的locale
例:
<vlh:column format="#,###,##0.00" locale="ref to locale instance" .. > 使用指定的locale.
<vlh:column format="#,###,##0.00" >使用览器的locale
5) title 指定列标?BR> 6) emphasisPattern q个模式能够高亮列的昄,它会在所有的分页中均高亮昄
例:
<vlh:column title="playerid" property="id" sortable="desc" emphasisPattern="30" />
id的g含有30的列被高亮昄
7) attributes 允许指定html属?BR> 例:
<vlh:column title="lastname" property="lastname" sortable="desc" attributes="width='150'"/>
4.vlh:attribute 为整个table讑֮附加html属?
使用在vlh:column 上的attributes属性只为header讄属性。而用vlh:attribute标签ؓ所有的行设|属?BR>
5.vlh:paging 生成分页和焦点的标签
<vlh:paging showSummary="true" pages="3"><c:out value="${page}"/></vlh:paging>
6.vlh:controls d指定的列
1)title 列的标题?BR>
7.vlh:action 为每行的action中添加编辑、删除动?BR> 例:<vlh:root url="baseUrl.do" >
<vlh:controls titleKey="Control" >
<vlh:action url="edit.jsp?" customParameters="<%=customParams%>">
使用自定义的HashMap变量customParamsQƈ做ؓ参数到添加到"edit.jsp?"的url?
</vlh:controls>
</vlh:root>
生成的url像这?..\edit.jsp?&custumParam1=customParamValue1&....&customParamN=customParamValueN
其中custumParam1...custumParamN是customParams中的key
8.vlh:addParam 讑֮L的参数到父标{,如root,action{?/STRONG>
例:为vlh:actiond参数
<vlh:action url="\delete.do?" customParameters="<%=customParams%>"> q是生成的基本url ..\delete.do?
<vlh:addParam name="id" property="id" temp="true"/>
d如下参数到url?&ACTid="Row-Java-Bean.getId()"Q如果tempgؓtrue,dACTION_TEMP_PARAM 前缀到参数名?BR> <vlh:addParam name="id" property="id" temp="false"/>
d如下参数到url?&id="Row-Java-Bean.getId()" Qtempgؓfalse,不添加前~
<vlh:addParam property="xyz" />
d如下参数到url?&ACTxyz="javabean.getXyz()" Qtemp值默认ؓtrue
<vlh:addParam name="OneStaticParam" value="OneStaticValue" temp="false"/>
d静态的url参数到url?&OneStaticParam="OneStaticValue"
</vlh:action>
例:为vlh:rootd参数
<vlh:root url="?" customParameters="<%=customParams%>">
<vlh:addParam name="method" value="doView" temp="false"/>
d静态的url参数到url?呈现l果Q?.\?method=doView
</vlh:root>
display上手Ҏ(gu)Q功能简单,界面漂亮Q不q功能比较有限。感觉最不爽的就是在一上排好序后Q再点击下一后Q排序就׃。而且当数据量大时Q它的排序会有问?/P>
eXtremeComponents上手Ҏ(gu)Q操作烦索,界面一般,不过L(fng)在排序上没有displayTag的问题。数据量大时Q它的排序也会有问题
valueList我认为最强大的标{,需要与springl合使用Q上手不易,界面漂亮Q功能超强。目前没有发CQ何不爽的地方?/P>
先脓(chung)出display的心得,后箋会脓(chung)出其它两个的心得
displayTag学习(fn)摘要
1.tableTag中name属性:值默认作用域Qrequest
<display:table name="accList">
如果作用域ؓsessionQ则<display:table name="sessionScope.accList">
tableTag中指定ID属性会把该对象加入到pageContext对象中去。如ID="test"
<%int cate=((Role)pageContext.getAttribute("test")).getCategory();%>
生成表格的序列号 例如Q?lt;display:table id="row" name="mylist">
<display:column title="序列?><%=pageContext.getAttribute("row_rowNum")%></display:column>
如行Prow_rowNum <c:out value="${row_rowNum}"/>
firstName:row.firstName <c:out value="${row.firstName}"/>
lastName: row.lastName 全部由ID来取?/P>
2.限制面昄的结果集?BR> 1)全部<display:table name="accList" class="its" id="test">
2)??lt;display:table name="accList" class="its" id="test" length="5">
3)从第二个开始,昄??lt;display:table name="accList" class="its" id="test" offset="2" length="5">
3.包装器decorators,有行包装?必须l承TableDecorator)和列包装?必须实现ColumnDecorator)
在tableTag中显ClistӞdecorators中的Ҏ(gu)会在list前调用,如果decorators实现cM有相关的getXXX()Ҏ(gu)Ӟ调用此方法,如果没有Q则直接调用list
在columnTag中显CvalueӞdecorators中的Ҏ(gu)会先调用Q?应该重用)
4.传递参敎ͼ有两U方式,
一。struts方式Q有以下几个属?BR> 1)href 基本的超q接
2)paramId d到url上的参数?BR> <display:column property="status" href="details.jsp" paramId="id" paramProperty="id" />
3)paramName 传递容器内的其它bean当作参数 如:request.setAttribute("testparam", "sendamail");
<display:column property="email" href="details.jsp" paramId="action" paramName="testparam" paramScope="request" />
4)paramScope 指定bean的作用域
二。decorators方式
cWrapperҎ(gu)Qpublic String getLink1()
{
ListObject lObject= (ListObject)getCurrentRowObject();
int lIndex= getListIndex();
return "<a href="details.jsp?index=" + lIndex + "">" + lObject.getId() + "</a>";
}标签Q?BR> <display:table name="sessionScope.details" decorator="org.displaytag.sample.Wrapper" >
<display:column property="link1" title="ID" />
<display:column property="email" />
</display:table>
5.分页
指定属?pagesize="10" 每页昄10条记?/P>
6.排序
1Q在list中封装的对象的属性要实现Comparable接口,(一般均实现?
2) 在columnTag中指定sortable="true"
可指定默认排序的?defaultsort="1" 数gؓW几列默认排?defaultorder="descending" 指定默认为降?/P>
7.导出 支持下列格式Q?html', 'xml', 'csv', and 'excel'.
属性:export="true",注意导出无效Q当使用jsp:include or the RequestDispatcher
<display:column media="csv excel" title="URL" property="url"/>
指定该url属性值只能在csv、excel中导?BR> 需要指定export filter.
8.更改默认讄
1)通过<display:setProperty name=... value=...> 标签Q可以覆盖一些默认设|?BR> 2)创徏displaytag.properties文gQ所有时区共用,Z文编码则创徏displaytag_zh_cn.propertiesQ放到类路径?jar包内共有两个默认的属性文件TableTag.propertiesQmessage.properties
9其它
1)当多个表在一|C时Q每个表都想要有分页、排序、导出等功能Ӟ只需为每个table指定一个不同的ID卛_?BR> 2)增加表头<display:caption>角色理</display:caption>
3)增加表尾 <display:footer><tr><td colspan="6" align="center" >国瑞数码版权所?lt;/td></tr></display:footer>
4)http和email自动链接功能Q指定autolink="true"
5)指定一列显C的最大长度,避免太长把表格变?maxLength="10" style="whitespace: nowrap;"
6)当列的gؓnullQ用nulls="false"属性把null转ؓI白
eXtremeComponent学习(fn)摘要
1. TableTag必须指定collection属?gؓbean名,它会?page,request,session,application)中查找此bean,在tableq代昄列时Q要通过bean在List中查找。在Web中传递的bean必须实现Serializable接口.
?.
<ec:table collection="presidents">
<ec:column property="firstName"/>最通用的显C方?调用getFirstName()
<ec:column property="lastName"/>
${presidents.lastName}另一U方式,直接dlastName属?另一U用途如下显C?BR> 1)<a href="http://goto.president.detail">${pageScope.presidents.lastName}</a>
2)<a href="http://goto.president.detail?firstName=${pageScope.presidents.firstName}">${pageScope.presidents.lastName}</a>
</ec:column>
</ec:table>
?.
<ec:table
collection="presidents"
imagePath="${pageContext.request.contextPath}/images/*.gif"
action="${pageContext.request.contextPath}/presidents.run"
title="Presisent" 指定表格的标?BR> filterable="false"qo
sortable="false"排序
saveFilterSort="true"用户操作完排序、过滤后下次再返回时看到相同的结果。要求:在url的参C指定useSessionFilterSort=true
>
...
</ec:table>所有的属性默认ؓ全部打开?BR>2.默认一|C?5行,rowsDisplayed属性指定一|C的行数。如果设|gؓ0显C所有行。也可以通过讄showPagination=false来显C所有行。在TableTag中可以设|一些样?style)属?BR>?.
<ec:table
collection="presidents"
cellspacing="2" 表格有立体感
cellpadding="0"
border="0"
width="80%"
style=""指定内部样式
styleClass=""分别指定css
headerClass=""分别指定css
/>
3.ColumnTag
1)<ec:column property="born" cell="date" parse="yyyy-MM-dd" format="MM/dd/yyyy"/>
当borngؓStringӞ要把String-->DateQ需指定parse属性。format属性可对值格式化
当borngؓDateӞ无需指定parse属?BR><ec:column property="payroll" cell="currency" format="###,###,##0.00"/>
大部分的旉、日期、贷币均可被格式?BR>2)可指定filterableQsortable属性,它们覆盖TableTag中的属性,只对指定的列q行qo、排序?/P>
4.Cellq回的每一列都是一个Object,它能被format,modify.Cell做ؓ一个模板被~存以便重复使用?BR>使用程Q?)初始化Cell
2)getHtml()
3)销毁全局变量{待再次使用
<ec:column property="firstName" cell="com.mycompany.cell.MyCell"/>
要用自定义的CellQ只需要extend BaseCell或implements Cell接口卛_Q然后在columnTag中指定完全限定名?/P>
5.ParameterTag
默认会把所有的参数全部传递,如果当你需要locking down tableӞ可通过指定autoIncludeParameters=”false”取消自动传递参敎ͼ转而通过讄<ec:parameter name=”foo?value=?{param.foo}?>来传递参数?/P>
6.ExportTag
可导出Excel、pdf、csv{格式,分页无效,把所有行全部导出。排序、过滤后的所有行全部导?排序、过滤有?