1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.struts.taglib.html;
22
23 import org.apache.struts.Globals;
24 import org.apache.struts.action.ActionMessage;
25 import org.apache.struts.action.ActionMessages;
26 import org.apache.struts.taglib.TagUtils;
27 import org.apache.struts.util.MessageResources;
28
29 import javax.servlet.jsp.JspException;
30 import javax.servlet.jsp.tagext.TagSupport;
31
32 import java.util.Iterator;
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 public class ErrorsTag extends TagSupport {
63
64
65
66 protected static MessageResources messages =
67 MessageResources.getMessageResources(Constants.Package
68 + ".LocalStrings");
69
70
71
72
73
74
75 protected String bundle = null;
76
77
78
79
80 protected String locale = Globals.LOCALE_KEY;
81
82
83
84
85 protected String name = Globals.ERROR_KEY;
86
87
88
89
90
91 protected String property = null;
92
93
94
95
96 protected String header = null;
97
98
99
100
101 protected String footer = null;
102
103
104
105
106 protected String prefix = null;
107
108
109
110
111 protected String suffix = null;
112
113 public String getBundle() {
114 return (this.bundle);
115 }
116
117 public void setBundle(String bundle) {
118 this.bundle = bundle;
119 }
120
121 public String getLocale() {
122 return (this.locale);
123 }
124
125 public void setLocale(String locale) {
126 this.locale = locale;
127 }
128
129 public String getName() {
130 return (this.name);
131 }
132
133 public void setName(String name) {
134 this.name = name;
135 }
136
137 public String getProperty() {
138 return (this.property);
139 }
140
141 public void setProperty(String property) {
142 this.property = property;
143 }
144
145 public String getHeader() {
146 return (header == null) ? "errors.header" : header;
147 }
148
149 public void setHeader(String header) {
150 this.header = header;
151 }
152
153 public String getFooter() {
154 return (footer == null) ? "errors.footer" : footer;
155 }
156
157 public void setFooter(String footer) {
158 this.footer = footer;
159 }
160
161 public String getPrefix() {
162 return (prefix == null) ? "errors.prefix" : prefix;
163 }
164
165 public void setPrefix(String prefix) {
166 this.prefix = prefix;
167 }
168
169 public String getSuffix() {
170 return (suffix == null) ? "errors.suffix" : suffix;
171 }
172
173 public void setSuffix(String suffix) {
174 this.suffix = suffix;
175 }
176
177
178
179
180
181
182
183
184 public int doStartTag() throws JspException {
185
186 ActionMessages errors = null;
187
188 try {
189 errors =
190 TagUtils.getInstance().getActionMessages(pageContext, name);
191 } catch (JspException e) {
192 TagUtils.getInstance().saveException(pageContext, e);
193 throw e;
194 }
195
196 if ((errors == null) || errors.isEmpty()) {
197 return (EVAL_BODY_INCLUDE);
198 }
199
200 boolean headerPresent =
201 TagUtils.getInstance().present(pageContext, bundle, locale,
202 getHeader());
203
204 boolean footerPresent =
205 TagUtils.getInstance().present(pageContext, bundle, locale,
206 getFooter());
207
208 boolean prefixPresent =
209 TagUtils.getInstance().present(pageContext, bundle, locale,
210 getPrefix());
211
212 boolean suffixPresent =
213 TagUtils.getInstance().present(pageContext, bundle, locale,
214 getSuffix());
215
216
217 StringBuffer results = new StringBuffer();
218 boolean headerDone = false;
219 String message = null;
220 Iterator reports =
221 (property == null) ? errors.get() : errors.get(property);
222
223 while (reports.hasNext()) {
224 ActionMessage report = (ActionMessage) reports.next();
225
226 if (!headerDone) {
227 if (headerPresent) {
228 message =
229 TagUtils.getInstance().message(pageContext, bundle,
230 locale, getHeader());
231
232 results.append(message);
233 }
234
235 headerDone = true;
236 }
237
238 if (prefixPresent) {
239 message =
240 TagUtils.getInstance().message(pageContext, bundle, locale,
241 getPrefix());
242 results.append(message);
243 }
244
245 if (report.isResource()) {
246 message =
247 TagUtils.getInstance().message(pageContext, bundle, locale,
248 report.getKey(), report.getValues());
249 } else {
250 message = report.getKey();
251 }
252
253 if (message != null) {
254 results.append(message);
255 }
256
257 if (suffixPresent) {
258 message =
259 TagUtils.getInstance().message(pageContext, bundle, locale,
260 getSuffix());
261 results.append(message);
262 }
263 }
264
265 if (headerDone && footerPresent) {
266 message =
267 TagUtils.getInstance().message(pageContext, bundle, locale,
268 getFooter());
269 results.append(message);
270 }
271
272 TagUtils.getInstance().write(pageContext, results.toString());
273
274 return (EVAL_BODY_INCLUDE);
275 }
276
277
278
279
280 public void release() {
281 super.release();
282 bundle = Globals.MESSAGES_KEY;
283 locale = Globals.LOCALE_KEY;
284 name = Globals.ERROR_KEY;
285 property = null;
286 header = null;
287 footer = null;
288 prefix = null;
289 suffix = null;
290 }
291 }