Bryan

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  37 Posts :: 3 Stories :: 24 Comments :: 0 Trackbacks
DisplayTag

DisplayTag在表格数据显示,排序,生成报表,分页,包括数据的格式化有着强大的功能。使用DisplayTag可以使得程序的前台开发更容易,更方便。很多的功能可以通过官方网站来获得相关的信息。

因为自从DisplayTag在去年发布以后,到现在没有新的版本,所以在程序的开发过程中,有一些限制,好在都有相关的方法进行替代。

 Multiple Parameters:

一般的程序在DisplayTag构造link,都需要传递多个参数,当使用Decorator的时候,未免会给程序的维护带来很大的困难,DisplayTag在使用 paramId在传递参数的时候只能传递一个参数,这给大多数的程序处理带来了不便,可以通过修改Column类中的private Href getColumnHref(String columnContent) throws ObjectLookupException方法来达到目的,很多人已经提出相关的解决方案,见http://jira.codehaus.org/browse/DISPL-120

但是毕竟没有官方的release版本,这样同样对以后的维护带来不便。最快也是最简洁的办法就是通过JSTL来构造link,这种方法不再限制只能传递一个参数,给程序的处理带来了方便。使用Struts2 , JSTLDisplayTag结合,构造link会使程序更易维护。下面是简短的JSTLDisplayTag结合在一起的方法。

 <display:table name="jobz" class="simple" id="row" >
  <display:column  titleKey="label.global.actions" >
             <c:url var="viewurl" value="/viewJobDetail.action">
                     <c:param name="name" value="${row.name}"/>
                     <c:param name="groupName" value="${row.group}"/>
             </c:url>
             <c:url var="exeurl" value="/viewJobDetail.action">
                     <c:param name="name" value="${row.name}"/>
                     <c:param name="groupName" value="${row.group}"/>
                     <c:param name="executeJobAction" value="execute"/>
             </c:url>
             <c:url var="editurl" value="/viewJobDetail.action">
                     <c:param name="name" value="${row.name}"/>
                     <c:param name="groupName" value="${row.group}"/>
                     <c:param name="editAction" value="edit"/>
             </c:url>
      <a href='<c:out value="${viewurl}"/>'><fmt:message key="label.global.view"/></a> |
      <a href='<c:out value="${editurl}"/>'><fmt:message key="label.global.edit"/></a> |
      <a href='<c:out value="${exeurl}"/>'><fmt:message key="label.global.execute"/></a> &nbsp;
  </display:column>
 
  <display:column property="group" titleKey="label.job.group" sortable="true"   />
  <display:column property="name" titleKey="label.job.name" sortable="true"  />
  <display:column property="description" titleKey="label.job.description" />
  <display:column property="jobClass" titleKey="label.job.jobClass" sortable="true"  />
</display:table>

通过TableID,我们可以或得相关的数据的值,并动态的生成相关的连接,

<display:table id="hello" requestURI="hello.action" pagesize="10">
<display:column title="Entity">
      <c:url var="exeurl" value="/other.action">
     
<c:param name="entityName" value="${hello.entity}" />
     
</c:url>

      <a onclick="highlightElem(this,'hello')" target="myFrame" class="linkBlue" href='<c:out value="${exeurl}"/>'><c:out value="${hello.entity}"/>
     
</a>
</display:column>
<display:table/>

DisplayTag 分页

DisplayTag在分页的时候,Url会出现诸如d-8271310-p=3这样的参数,d-8271310-p是通过Encode tableID(一个String型的常量)产生的。如果我们需要维护页面的page的状态,这一点很重要。下面是相关的代码。
HttpServletRequest request=(HttpServletRequest)ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);

 String pageNo=request.getParameter((new org.displaytag.util.ParamEncoder(tableID).encodeParameterName(org.displaytag.tags.TableTagParameters.PARAMETER_PAGE)));

 我们就可以获得pageNo 3, new org.displaytag.util.ParamEncoder(tableID).encodeParameterName(org.displaytag.tags.TableTagParameters.PARAMETER_PAGE))会生成像d-8271310-p这样的参数.

posted on 2008-03-20 15:46 Life is no respector of any genius. 阅读(1163) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: