1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package org.apache.struts.tiles.taglib;
24
25 import java.io.IOException;
26
27 import javax.servlet.http.HttpServletRequest;
28 import javax.servlet.jsp.JspException;
29 import javax.servlet.jsp.PageContext;
30 import javax.servlet.jsp.tagext.TagSupport;
31
32 import org.apache.struts.tiles.ComponentContext;
33
34 /**
35 * Retrieve the value of the specified component/template attribute property,
36 * and render it to the current JspWriter as a String.
37 * The usual toString() conversion is applied on the found value.
38 */
39 public class GetAttributeTag extends TagSupport implements ComponentConstants {
40
41 private String attribute = null;
42 /** Role attribute */
43 private String role = null;
44 /**
45 * Do we ignore error if attribute is not found.
46 * Default value is <code>false</code>, which will throw an exception.
47 */
48 private boolean isErrorIgnored = false;
49
50 /**
51 * Default constructor.
52 */
53 public GetAttributeTag() {
54 super();
55 }
56
57 /**
58 * Release all allocated resources.
59 */
60 public void release() {
61
62 super.release();
63 attribute = null;
64 role = null;
65 isErrorIgnored = false;
66 }
67
68 /**
69 * Set attribute.
70 * @param attribute Attribute.
71 */
72 public void setAttribute(String attribute){
73 this.attribute = attribute;
74 }
75
76 /**
77 * Get attribute.
78 * @return Attribute.
79 */
80 public String getAttribute()
81 {
82 return attribute;
83 }
84
85 /**
86 * Set Name.
87 * Same as setAttribute().
88 * @param value Attribute.
89 */
90 public void setName(String value)
91 {
92 this.attribute = value;
93 }
94
95 /**
96 * Get Name.
97 * Set as getAttribute().
98 * @return Attribute.
99 */
100 public String getName()
101 {
102 return attribute;
103 }
104
105 /**
106 * Set ignoring flag when attribute is not found.
107 * @param ignore default: <code>false</code>: Exception is thrown when attribute is not found, set to <code>
108 * true</code> to ignore missing attributes silently
109 */
110 public void setIgnore(boolean ignore)
111 {
112 this.isErrorIgnored = ignore;
113 }
114
115 /**
116 * Get ignore flag.
117 * @return <code>false</code>: Exception is thrown when attribute is not found, set to <code>
118 * true</code> to ignore missing attributes silently
119 */
120 public boolean getIgnore()
121 {
122 return isErrorIgnored;
123 }
124
125 /**
126 * Set role.
127 * @param role The role the user must be in to store content.
128 */
129 public void setRole(String role) {
130 this.role = role;
131 }
132
133 /**
134 * Get role.
135 * @return Role.
136 */
137 public String getRole()
138 {
139 return role;
140 }
141
142 /**
143 * Close tag.
144 * @throws JspException On error processing tag.
145 */
146 public int doEndTag() throws JspException {
147
148
149 if(role != null && !((HttpServletRequest)pageContext.getRequest()).isUserInRole(role) )
150 {
151 return EVAL_PAGE;
152 }
153
154
155 ComponentContext compContext = (ComponentContext)pageContext.getAttribute( ComponentConstants.COMPONENT_CONTEXT, PageContext.REQUEST_SCOPE);
156
157 if( compContext == null )
158 throw new JspException ( "Error - tag.getAsString : component context is not defined. Check tag syntax" );
159
160 Object value = compContext.getAttribute(attribute);
161 if( value == null)
162 {
163 if(isErrorIgnored == false )
164 throw new JspException ( "Error - tag.getAsString : attribute '"+ attribute + "' not found in context. Check tag syntax" );
165 else
166 return EVAL_PAGE;
167 }
168
169
170 try
171 {
172 pageContext.getOut().print( value );
173 }
174 catch( IOException ex )
175 {
176 ex.printStackTrace();
177 throw new JspException ( "Error - tag.getProperty : IOException ", ex);
178 }
179
180 return EVAL_PAGE;
181 }
182 }