1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.struts2.views.jsp;
22
23 import java.io.PrintWriter;
24
25 import javax.servlet.jsp.tagext.BodyTagSupport;
26
27 import org.apache.struts2.util.FastByteArrayOutputStream;
28 import org.apache.struts2.views.annotations.StrutsTagAttribute;
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 @StrutsTagAttribute(required=false,description="The id of the tag element")
43 public void setId(String string) {
44 super.setId(string);
45 }
46
47 protected boolean altSyntax() {
48 return ContextUtil.isUseAltSyntax(getStack().getContext());
49 }
50
51 protected ValueStack getStack() {
52 return TagUtils.getStack(pageContext);
53 }
54
55 protected String findString(String expr) {
56 return (String) findValue(expr, String.class);
57 }
58
59 protected Object findValue(String expr) {
60 if (altSyntax()) {
61
62 if (expr.startsWith("%{") && expr.endsWith("}")) {
63 expr = expr.substring(2, expr.length() - 1);
64 }
65 }
66
67 return getStack().findValue(expr);
68 }
69
70 protected Object findValue(String expr, Class toType) {
71 if (altSyntax() && toType == String.class) {
72 return translateVariables(expr, getStack());
73 } else {
74 if (altSyntax()) {
75
76 if (expr.startsWith("%{") && expr.endsWith("}")) {
77 expr = expr.substring(2, expr.length() - 1);
78 }
79 }
80
81 return getStack().findValue(expr, toType);
82 }
83 }
84
85 protected String toString(Throwable t) {
86 FastByteArrayOutputStream bout = new FastByteArrayOutputStream();
87 PrintWriter wrt = new PrintWriter(bout);
88 t.printStackTrace(wrt);
89 wrt.close();
90
91 return bout.toString();
92 }
93
94 protected String getBody() {
95 if (bodyContent == null) {
96 return "";
97 } else {
98 return bodyContent.getString().trim();
99 }
100 }
101
102 public static String translateVariables(String expression, ValueStack stack) {
103 while (true) {
104 int x = expression.indexOf("%{");
105 int y = expression.indexOf("}", x);
106
107 if ((x != -1) && (y != -1)) {
108 String var = expression.substring(x + 2, y);
109
110 Object o = stack.findValue(var, String.class);
111
112 if (o != null) {
113 expression = expression.substring(0, x) + o + expression.substring(y + 1);
114 } else {
115
116 expression = expression.substring(0, x) + expression.substring(y + 1);
117 }
118 } else {
119 break;
120 }
121 }
122
123 return expression;
124 }
125 }