View Javadoc

1   /**
2    * Licensed under the Artistic License; you may not use this file
3    * except in compliance with the License.
4    * You may obtain a copy of the License at
5    *
6    *      http://displaytag.sourceforge.net/license.html
7    *
8    * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
9    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
10   * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
11   */
12  package org.displaytag.decorator;
13  
14  import java.io.IOException;
15  import java.util.ArrayList;
16  import java.util.Arrays;
17  import java.util.Iterator;
18  import java.util.List;
19  import java.util.Map;
20  
21  import javax.servlet.jsp.JspWriter;
22  import javax.servlet.jsp.PageContext;
23  
24  import org.apache.commons.lang.ObjectUtils;
25  import org.displaytag.model.TableModel;
26  
27  
28  /**
29   * A table decorator which adds checkboxes for selectable rows.
30   * @author Fabrizio Giustina
31   * @version $Id: CheckboxTableDecorator.java 1134 2008-12-27 10:16:33Z fgiust $
32   */
33  public class CheckboxTableDecorator extends TableDecorator
34  {
35  
36      private String id = "id";
37  
38      private Map params;
39  
40      private List checkedIds;
41  
42      private String fieldName = "_chk";
43  
44      /**
45       * Setter for <code>id</code>.
46       * @param id The id to set.
47       */
48      public void setId(String id)
49      {
50          this.id = id;
51      }
52  
53      /**
54       * Setter for <code>fieldName</code>.
55       * @param fieldName The fieldName to set.
56       */
57      public void setFieldName(String fieldName)
58      {
59          this.fieldName = fieldName;
60      }
61  
62      /**
63       * @see org.displaytag.decorator.Decorator#init(javax.servlet.jsp.PageContext, java.lang.Object,
64       * org.displaytag.model.TableModel)
65       */
66      public void init(PageContext pageContext, Object decorated, TableModel tableModel)
67      {
68          super.init(pageContext, decorated, tableModel);
69          String[] params = pageContext.getRequest().getParameterValues(fieldName);
70          checkedIds = params != null ? new ArrayList(Arrays.asList(params)) : new ArrayList(0);
71      }
72  
73      /**
74       * @see org.displaytag.decorator.TableDecorator#finish()
75       */
76      public void finish()
77      {
78  
79          if (!checkedIds.isEmpty())
80          {
81              JspWriter writer = getPageContext().getOut();
82              for (Iterator it = checkedIds.iterator(); it.hasNext();)
83              {
84                  String name = (String) it.next();
85                  StringBuffer buffer = new StringBuffer();
86                  buffer.append("<input type=\"hidden\" name=\"");
87                  buffer.append(fieldName);
88                  buffer.append("\" value=\"");
89                  buffer.append(name);
90                  buffer.append("\">");
91                  try
92                  {
93                      writer.write(buffer.toString());
94                  }
95                  catch (IOException e)
96                  {
97                      // should never happen
98                  }
99              }
100         }
101 
102         super.finish();
103 
104     }
105 
106     public String getCheckbox()
107     {
108 
109         String evaluatedId = ObjectUtils.toString(evaluate(id));
110 
111         boolean checked = checkedIds.contains(evaluatedId);
112 
113         StringBuffer buffer = new StringBuffer();
114         buffer.append("<input type=\"checkbox\" name=\"_chk\" value=\"");
115         buffer.append(evaluatedId);
116         buffer.append("\"");
117         if (checked)
118         {
119             checkedIds.remove(evaluatedId);
120             buffer.append(" checked=\"checked\"");
121         }
122         buffer.append("/>");
123 
124         return buffer.toString();
125     }
126 
127 }