1
2
3
4
5
6
7
8
9
10
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
30
31
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
46
47
48 public void setId(String id)
49 {
50 this.id = id;
51 }
52
53
54
55
56
57 public void setFieldName(String fieldName)
58 {
59 this.fieldName = fieldName;
60 }
61
62
63
64
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
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
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 }