displaytagダイナミックカラム実装

12411 ワード

<!--
.important {
color: red;
font-weight: bold;
}
-->
このダイナミックカラムの実装方法はdisplaytag-examples-1.2から来ている.warが提供する例では、実際にダウンロードしたzipファイルにはjarパッケージだけでなく、この様々な例を含むwarパッケージもあり、displaytagを学ぶのに非常に良い資料です.
完全なコードを提供:

<jsp:root version="1.2" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:display="urn:jsptld:http://displaytag.sf.net/el"
  xmlns:c="urn:jsptld:http://java.sun.com/jstl/core">
  <jsp:directive.page contentType="text/html; charset=UTF-8" />
  <jsp:directive.page import="org.displaytag.sample.*" />
  <jsp:include page="inc/header.jsp" flush="true" />

  <jsp:scriptlet>

  // available column sets should be managed in the backend, not in the jsp page.
  // you just need to build a list with Maps containing standard column attributes

  java.util.Map email = new java.util.HashMap();
  email.put("property", "email");
  email.put("title", "email title");


  java.util.Map date = new java.util.HashMap();
  date.put("property", "date");
  date.put("title", "date");
  date.put("sortable", Boolean.TRUE);


  java.util.Map money = new java.util.HashMap();
  money.put("property", "money");
  money.put("title", "money");
  money.put("format", "{0,number,000.00 €}");

  java.util.List set1 = new java.util.ArrayList();
  java.util.List set2 = new java.util.ArrayList();
  java.util.List set3 = new java.util.ArrayList();

  set1.add(email);
  set1.add(date);
  set1.add(money);

  set2.add(money);
  set2.add(email);

  set3.add(date);
  set3.add(date);

  // this is the logic for choosing a column set
  // should be done in a controller/viewer helper, not in the jsp

  String choose = request.getParameter("set");
  if ("3".equals(choose))
  {
      request.setAttribute("collist", set3);
  }
  else if ("2".equals(choose))
  {
      request.setAttribute("collist", set2);
  }
  else
  {
      request.setAttribute("collist", set1);
  }

  // just prepare the usual list
  request.setAttribute( "test", new TestList(10, false) );

  </jsp:scriptlet>


  <h2>Using predefined column lists</h2>

  <p>This example shows how a predefined set of columns can be applied to a table.</p>
  <p>All you have to do is feeding the table with a list of beans/Maps which contains the needed column attributes and
  create the needed <code><![CDATA[<display:column>]]></code> tags and use a simple iteration directly in the jsp</p>
  <p>In this page we create three different set of colums, implemented as Lists of Maps, directly in the jsp. Obviously,
  you will probably want to configure them in a db, xml file, or any other source for a real use (Spring xml files could
  be an easy and flexible solution). No dipendence on displaytag-specific classes is required in your application, since
  you can simply use a plain Map or implement a custom bean.</p>
  <p>Click on a column set below to see it applied to the table.</p>

  <br />
  <br />

  <ul id="stylelist">
    <li><a href="example-columnlist.jsp?set=1">column set 1</a></li>
    <li><a href="example-columnlist.jsp?set=2">column set 2</a></li>
    <li><a href="example-columnlist.jsp?set=3">column set 3</a></li>
  </ul>

  <br />
  <br />

  <display:table name="test">
    <c:forEach var="cl" items="${collist}">
      <display:column property="${cl.property}" title="${cl.title}" sortable="${cl.sortable}" format="${cl.format}" />
    </c:forEach>
  </display:table>

  <jsp:include page="inc/footer.jsp" flush="true" />

</jsp:root>

View Code
全体の論理は非常に簡単で、以下は私の分析です.
(1)まず例全体が非常に簡単であるため,データ層,制御層,表示層を1つのjspファイルに配置し,ファイルにも実際にはそうすべきではないと述べた.
(2)動的列とは何かを考えてみましょう.まず同じjspページ(異なるjspページであれば、直接静的であれば異なる表示効果が得られる)、異なる場合(一般的には異なる人によって異なる権限を有し、額これは私が推測した)に得られる表示結果は異なる(得られた結果は異なる列を有するが、そのbeanデータは同じであり、beanの異なる属性を表示するだけである)
(3)通常の動作は、に表示するbeanプロパティ、すなわちカラム名がいくつか含まれることです.の構造は非常に似ていることを発見し,を用いて所望のを循環出力すればよい.
(4)動的列の効果を達成するには,が遍歴する集合を制御し,上記のコードを解析し,その集合が1つのSetであり,その要素が1つのMap要素であることを知ることが重要である.各Map要素はbean属性、すなわち列に対応します.このMap要素は、の属性である複数の名前値ペアから構成されています.
(5)残りはページ上のボタンをクリックし,異なるパラメータを渡し,セットにどの列が含まれているかをバックグラウンドで制御する.もう1つ注意しなければならないのは、表示するときに、Setセットを巡るとき、の属性はすべて書かなければならないことです.それはすべてのMap要素が含む可能性のあるすべての属性を含むべきで、すべてのMap要素が同じ属性を含むわけではありません.
(6)原理全体を理解した後,この動的列を適用する際に最も重要なのは,いったいいつどの列を表示するのか,他の場合は別の列を表示するのかという制御層の実現であり,これは非常に変化しやすい需要点であり,突然増加する場合であるため,拡張しやすいようにしなければならない.XMLファイル、またはデータベース保存を考慮できます.