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.taglib.TagUtils;
24 import org.apache.struts.util.MessageResources;
25
26 import javax.servlet.jsp.JspException;
27
28 import java.net.MalformedURLException;
29
30 import java.util.HashMap;
31 import java.util.Map;
32
33
34
35
36
37
38
39 public class LinkTag extends BaseHandlerTag {
40
41
42
43 protected static MessageResources messages =
44 MessageResources.getMessageResources(Constants.Package
45 + ".LocalStrings");
46
47
48
49
50
51
52 protected String text = null;
53
54
55
56
57
58
59 protected String anchor = null;
60
61
62
63
64
65
66
67
68 protected String forward = null;
69
70
71
72
73 protected String href = null;
74
75
76
77
78 protected String linkName = null;
79
80
81
82
83 protected String name = null;
84
85
86
87
88
89 protected String page = null;
90
91
92
93
94
95 protected String action = null;
96
97
98
99
100
101 protected String module = null;
102
103
104
105
106 protected String paramId = null;
107
108
109
110
111 protected String paramName = null;
112
113
114
115
116 protected String paramProperty = null;
117
118
119
120
121 protected String paramScope = null;
122
123
124
125
126 protected String property = null;
127
128
129
130
131 protected String scope = null;
132
133
134
135
136 protected String target = null;
137
138
139
140
141 protected boolean transaction = false;
142
143
144
145
146 protected Map parameters = new HashMap();
147
148
149
150
151 protected String indexId = null;
152 protected boolean useLocalEncoding = false;
153
154
155 public LinkTag() {
156 super();
157 doDisabled = false;
158 }
159
160 public String getAnchor() {
161 return (this.anchor);
162 }
163
164 public void setAnchor(String anchor) {
165 this.anchor = anchor;
166 }
167
168 public String getForward() {
169 return (this.forward);
170 }
171
172 public void setForward(String forward) {
173 this.forward = forward;
174 }
175
176 public String getHref() {
177 return (this.href);
178 }
179
180 public void setHref(String href) {
181 this.href = href;
182 }
183
184 public String getLinkName() {
185 return (this.linkName);
186 }
187
188 public void setLinkName(String linkName) {
189 this.linkName = linkName;
190 }
191
192 public String getName() {
193 return (this.name);
194 }
195
196 public void setName(String name) {
197 this.name = name;
198 }
199
200 public String getPage() {
201 return (this.page);
202 }
203
204 public void setPage(String page) {
205 this.page = page;
206 }
207
208 public String getAction() {
209 return (this.action);
210 }
211
212 public void setAction(String action) {
213 this.action = action;
214 }
215
216 public String getModule() {
217 return (this.module);
218 }
219
220 public void setModule(String module) {
221 this.module = module;
222 }
223
224 public String getParamId() {
225 return (this.paramId);
226 }
227
228 public void setParamId(String paramId) {
229 this.paramId = paramId;
230 }
231
232 public String getParamName() {
233 return (this.paramName);
234 }
235
236 public void setParamName(String paramName) {
237 this.paramName = paramName;
238 }
239
240 public String getParamProperty() {
241 return (this.paramProperty);
242 }
243
244 public void setParamProperty(String paramProperty) {
245 this.paramProperty = paramProperty;
246 }
247
248 public String getParamScope() {
249 return (this.paramScope);
250 }
251
252 public void setParamScope(String paramScope) {
253 this.paramScope = paramScope;
254 }
255
256 public String getProperty() {
257 return (this.property);
258 }
259
260 public void setProperty(String property) {
261 this.property = property;
262 }
263
264 public String getScope() {
265 return (this.scope);
266 }
267
268 public void setScope(String scope) {
269 this.scope = scope;
270 }
271
272 public String getTarget() {
273 return (this.target);
274 }
275
276 public void setTarget(String target) {
277 this.target = target;
278 }
279
280 public boolean getTransaction() {
281 return (this.transaction);
282 }
283
284 public void setTransaction(boolean transaction) {
285 this.transaction = transaction;
286 }
287
288 public String getIndexId() {
289 return (this.indexId);
290 }
291
292 public void setIndexId(String indexId) {
293 this.indexId = indexId;
294 }
295
296 public boolean isUseLocalEncoding() {
297 return useLocalEncoding;
298 }
299
300 public void setUseLocalEncoding(boolean b) {
301 useLocalEncoding = b;
302 }
303
304
305
306
307
308
309
310
311
312 public int doStartTag() throws JspException {
313 this.text = null;
314 this.parameters.clear();
315
316
317 return (EVAL_BODY_TAG);
318 }
319
320
321
322
323
324
325 public int doAfterBody() throws JspException {
326 if (bodyContent != null) {
327 String value = bodyContent.getString().trim();
328
329 if (value.length() > 0) {
330 text = value;
331 }
332 }
333
334 return (SKIP_BODY);
335 }
336
337
338
339
340
341
342 public int doEndTag() throws JspException {
343
344 StringBuffer results = new StringBuffer("<a");
345
346
347 prepareAttribute(results, "name", getLinkName());
348
349
350 if ((getLinkName() == null) || (getForward() != null)
351 || (getHref() != null) || (getPage() != null)
352 || (getAction() != null)) {
353 prepareAttribute(results, "href", calculateURL());
354 }
355
356 prepareAttribute(results, "target", getTarget());
357 prepareAttribute(results, "accesskey", getAccesskey());
358 prepareAttribute(results, "tabindex", getTabindex());
359 results.append(prepareStyles());
360 results.append(prepareEventHandlers());
361 prepareOtherAttributes(results);
362 results.append(">");
363
364
365 if (text != null) {
366 results.append(text);
367 }
368 results.append("</a>");
369 TagUtils.getInstance().write(pageContext, results.toString());
370
371 return (EVAL_PAGE);
372 }
373
374
375
376
377 public void release() {
378 super.release();
379 anchor = null;
380 forward = null;
381 href = null;
382 linkName = null;
383 name = null;
384 page = null;
385 action = null;
386 module = null;
387 paramId = null;
388 paramName = null;
389 paramProperty = null;
390 paramScope = null;
391 parameters.clear();
392 property = null;
393 scope = null;
394 target = null;
395 text = null;
396 transaction = false;
397 indexId = null;
398 useLocalEncoding = false;
399 }
400
401
402
403
404
405
406
407
408
409 protected String calculateURL()
410 throws JspException {
411
412 Map params =
413 TagUtils.getInstance().computeParameters(pageContext, paramId,
414 paramName, paramProperty, paramScope, name, property, scope,
415 transaction);
416
417
418 if (!this.parameters.isEmpty()) {
419 if (params == null) {
420 params = new HashMap();
421 }
422 params.putAll(this.parameters);
423 }
424
425
426
427 if (indexed) {
428 int indexValue = getIndexValue();
429
430
431 if (params == null) {
432 params = new HashMap();
433 }
434
435 if (indexId != null) {
436 params.put(indexId, Integer.toString(indexValue));
437 } else {
438 params.put("index", Integer.toString(indexValue));
439 }
440 }
441
442 String url = null;
443
444 try {
445 url = TagUtils.getInstance().computeURLWithCharEncoding(pageContext,
446 forward, href, page, action, module, params, anchor, false,
447 useLocalEncoding);
448 } catch (MalformedURLException e) {
449 TagUtils.getInstance().saveException(pageContext, e);
450 throw new JspException(messages.getMessage("rewrite.url",
451 e.toString()));
452 }
453
454 return (url);
455 }
456
457
458
459
460
461
462
463
464 public void addParameter(String paramName, Object paramValue) {
465 this.parameters.put(paramName, paramValue);
466 }
467 }