⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tut_decorators.apt

📁 一个比较不错的java分页标签,有源代码,开发者 可以学习学习
💻 APT
字号:
                                    ------------------------------
                                             Decorators
                                    ------------------------------
                                          Fabrizio Giustina
                                    ------------------------------
                                              11-11-2005
                                    ------------------------------

Decorators

   A "decorator" is a design pattern where one object provides a layer
   of functionality by wrapping or "decorating" another object.

* Table decorators

+-------------------------------------------------------------------+
<display:table name="test" decorator="org.displaytag.sample.Wrapper" >
  <display:column property="id" title="ID" />
  <display:column property="email" />
  <display:column property="status" />
  <display:column property="date" />
  <display:column property="money" />
</display:table>
+-------------------------------------------------------------------+


   Let's assume you have list of business objects that you want to
   display, and the objects contain properties that don't return native
   Strings, and you want control over how they get displayed in the
   list (for example, Dates, money, numbers, etc...). I would be bad
   form to put this type of formatting code inside your business
   objects, so instead create a Decorator that formats the data
   according to your needs.

   Notice the following 4 key things (and refer to the TableDecorator
   javadoc for some of the other details).

     * The Wrapper class must be a subclass of TableDecorator. There is
       various bootstrapping and API methods that are called inside the
       TableDecorator class and your class must subclass it for things
       to work properly (you will get a JspException if your class does
       not subclass it).

     * Be smart and create your formatters just once in the constructor
       method - performance will be a lot better...

     * Notice how the getDate() and getMoney() methods overload the
       return value of your business object contained in the List. They
       use the TableDecorator.getCurrentRowObject() method to get a
       handle to the underlying business object, and then format it
       accordingly.

     * We do not have to overload each of the other business object
       properties (like getID, getEmail, etc...). The decorator class
       is called first, but if it doesn't implement the method for the
       property called, then the underlying business class is called.

     []

   The way this works is that a single decorator object is created
   right before the table tag starts iterating through your List,
   before it starts processing a particular row, it gives the object
   for that row to the decorator, then as the various properties
   getXXX() methods - the decorator will be called first and if the
   decorator doesn't implement the given property, the method will be
   called on the original object in your List.

* Column Decorators

   You can also specify decorators that work on individual columns,
   this would allow you to come up with data specific formatters, and
   just reuse them rather then coming up with a custom decorator for
   each table that you want to show a formatted date for.

+-------------------------------------------------------------------+
<display:table name="test">
  <display:column property="id" title="ID" />
  <display:column property="email" />
  <display:column property="status" />
  <display:column property="date" decorator="org.displaytag.sample.LongDateWrapper" />
</display:table>
+-------------------------------------------------------------------+


* Table decorators, column decorators or code in the column body?

   As a rule of thumb, a decorator is faster than using scriptlet or
   custom tags in the column body when using paging. When the column
   body is filled and full list is sorted, all the records need to be
   "prepared" by the table tag iterating on the whole list. If the
   column body is used the content will be evaluated for any row, also
   for the non displayed ones; using property, on the other hand, will
   cause the decorator only to be called for displayed rows.

   A table decorator have the power to add extra properties to your
   objects: for example you can add a getFullAddress() method to your
   table decorator and then use property="fullAddress" in a column. A
   table decorator can also provide custom html code added at the
   beginning/end of rowss and table.

   A column decorator is rather limited in its funcionality: it simply
   format an available value, and has actually no access to the page
   context or other properties. However, it is the simplest and most
   reusable block if you simply need to format dates, number or custom
   strings.

   Leaving decorators out and filling the column body is the simplest
   solution if you don't have to worry too much about paging and
   performance and it is optimal in a small, non paged, table. During
   sorting, though, if the column body is used, the result will be
   always sorted as a String.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -