1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.apache.struts2.views.jsp;
23
24 import java.io.PrintWriter;
25
26 import javax.servlet.jsp.tagext.BodyTagSupport;
27
28 import org.apache.struts2.util.FastByteArrayOutputStream;
29 import org.apache.struts2.views.util.ContextUtil;
30
31 import com.opensymphony.xwork2.util.ValueStack;
32
33
34 /***
35 * Contains common functonalities for Struts JSP Tags.
36 *
37 */
38 public class StrutsBodyTagSupport extends BodyTagSupport {
39
40 private static final long serialVersionUID = -1201668454354226175L;
41
42 protected boolean altSyntax() {
43 return ContextUtil.isUseAltSyntax(getStack().getContext());
44 }
45
46 protected ValueStack getStack() {
47 return TagUtils.getStack(pageContext);
48 }
49
50 protected String findString(String expr) {
51 return (String) findValue(expr, String.class);
52 }
53
54 protected Object findValue(String expr) {
55 if (altSyntax()) {
56
57 if (expr.startsWith("%{") && expr.endsWith("}")) {
58 expr = expr.substring(2, expr.length() - 1);
59 }
60 }
61
62 return getStack().findValue(expr);
63 }
64
65 protected Object findValue(String expr, Class toType) {
66 if (altSyntax() && toType == String.class) {
67 return translateVariables(expr, getStack());
68 } else {
69 if (altSyntax()) {
70
71 if (expr.startsWith("%{") && expr.endsWith("}")) {
72 expr = expr.substring(2, expr.length() - 1);
73 }
74 }
75
76 return getStack().findValue(expr, toType);
77 }
78 }
79
80 protected String toString(Throwable t) {
81 FastByteArrayOutputStream bout = new FastByteArrayOutputStream();
82 PrintWriter wrt = new PrintWriter(bout);
83 t.printStackTrace(wrt);
84 wrt.close();
85
86 return bout.toString();
87 }
88
89 protected String getBody() {
90 if (bodyContent == null) {
91 return "";
92 } else {
93 return bodyContent.getString().trim();
94 }
95 }
96
97 public static String translateVariables(String expression, ValueStack stack) {
98 while (true) {
99 int x = expression.indexOf("%{");
100 int y = expression.indexOf("}", x);
101
102 if ((x != -1) && (y != -1)) {
103 String var = expression.substring(x + 2, y);
104
105 Object o = stack.findValue(var, String.class);
106
107 if (o != null) {
108 expression = expression.substring(0, x) + o + expression.substring(y + 1);
109 } else {
110
111 expression = expression.substring(0, x) + expression.substring(y + 1);
112 }
113 } else {
114 break;
115 }
116 }
117
118 return expression;
119 }
120 }