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.nested.logic;
22
23 import org.apache.struts.taglib.logic.IterateTag;
24 import org.apache.struts.taglib.nested.NestedNameSupport;
25 import org.apache.struts.taglib.nested.NestedPropertyHelper;
26
27 import javax.servlet.http.HttpServletRequest;
28 import javax.servlet.jsp.JspException;
29
30 import java.util.Map;
31
32
33
34
35
36
37
38
39
40 public class NestedIterateTag extends IterateTag implements NestedNameSupport {
41
42 private String nesting = null;
43
44
45 private String originalName = null;
46 private String originalProperty = null;
47
48
49 private String originalNesting = null;
50 private String originalNestingName = null;
51
52
53
54
55
56
57
58
59
60 public int doStartTag() throws JspException {
61
62 originalName = getName();
63 originalProperty = getProperty();
64
65
66 if ((id == null) || (id.trim().length() == 0)) {
67 id = property;
68 }
69
70
71 HttpServletRequest request =
72 (HttpServletRequest) pageContext.getRequest();
73
74
75 originalNesting = NestedPropertyHelper.getCurrentProperty(request);
76 originalNestingName =
77 NestedPropertyHelper.getCurrentName(request, this);
78
79
80
81 if (getName() == null) {
82
83 nesting =
84 NestedPropertyHelper.getAdjustedProperty(request, getProperty());
85 } else {
86
87 nesting = getProperty();
88 }
89
90
91 NestedPropertyHelper.setNestedProperties(request, this);
92
93
94 int temp = super.doStartTag();
95
96
97 NestedPropertyHelper.setName(request, getName());
98 NestedPropertyHelper.setProperty(request, deriveNestedProperty());
99
100
101 return temp;
102 }
103
104
105
106
107
108
109 private String deriveNestedProperty() {
110 Object idObj = pageContext.getAttribute(id);
111
112 if (idObj instanceof Map.Entry) {
113 return nesting + "(" + ((Map.Entry) idObj).getKey() + ")";
114 } else {
115 return nesting + "[" + this.getIndex() + "]";
116 }
117 }
118
119
120
121
122
123
124
125 public int doAfterBody() throws JspException {
126
127 int temp = super.doAfterBody();
128 HttpServletRequest request =
129 (HttpServletRequest) pageContext.getRequest();
130
131 if (temp != SKIP_BODY) {
132
133 NestedPropertyHelper.setProperty(request, deriveNestedProperty());
134 }
135
136
137 return temp;
138 }
139
140
141
142
143
144
145
146
147 public int doEndTag() throws JspException {
148
149 int i = super.doEndTag();
150
151
152 HttpServletRequest request =
153 (HttpServletRequest) pageContext.getRequest();
154
155
156 super.setName(originalName);
157 super.setProperty(originalProperty);
158
159
160 if (originalNesting == null) {
161 NestedPropertyHelper.deleteReference(request);
162 } else {
163 NestedPropertyHelper.setProperty(request, originalNesting);
164 NestedPropertyHelper.setName(request, originalNestingName);
165 }
166
167
168 return i;
169 }
170
171
172
173
174 public void release() {
175
176 super.release();
177
178
179 originalName = null;
180 originalProperty = null;
181 originalNesting = null;
182 originalNestingName = null;
183 }
184 }