1 /*
2 * $Id: UseAttributeTag.java 471754 2006-11-06 14:55:09Z husted $
3 *
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements. See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership. The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License. You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 * KIND, either express or implied. See the License for the
18 * specific language governing permissions and limitations
19 * under the License.
20 */
21
22 package org.apache.struts.tiles.taglib;
23
24 import javax.servlet.jsp.JspException;
25 import javax.servlet.jsp.PageContext;
26 import javax.servlet.jsp.tagext.TagSupport;
27
28 import org.apache.struts.tiles.taglib.util.TagUtils;
29 import org.apache.struts.tiles.ComponentContext;
30
31
32 /**
33 * Custom tag exposing a component attribute to page.
34 *
35 */
36 public class UseAttributeTag extends TagSupport {
37
38
39 // ----------------------------------------------------- Instance Variables
40
41
42 /**
43 * Class name of object.
44 */
45 private String classname = null;
46
47
48 /**
49 * The scope name.
50 */
51 private String scopeName = null;
52
53 /**
54 * The scope value.
55 */
56 private int scope = PageContext.PAGE_SCOPE;
57
58
59
60 /**
61 * The attribute name to be exposed.
62 */
63 private String attributeName = null;
64
65 /**
66 * Are errors ignored. This is the property for attribute 'ignore'.
67 * Default value is <code>false</code>, which throws an exception.
68 * Only "attribute not found" - errors are ignored.
69 */
70 protected boolean isErrorIgnored = false;
71
72
73 // ------------------------------------------------------------- Properties
74
75
76 /**
77 * Release all allocated resources.
78 */
79 public void release() {
80
81 super.release();
82 attributeName = null;
83 classname = null;
84 scope = PageContext.PAGE_SCOPE;
85 scopeName = null;
86 isErrorIgnored = false;
87 // Parent doesn't clear id, so we do it
88 // bug reported by Heath Chiavettone on 18 Mar 2002
89 id = null;
90 }
91
92 /**
93 * Get class name.
94 */
95 public String getClassname() {
96
97 return (this.classname);
98
99 }
100
101
102 /**
103 * Set the class name.
104 *
105 * @param name The new class name.
106 */
107 public void setClassname(String name) {
108
109 this.classname = name;
110
111 }
112
113 /**
114 * Set name.
115 */
116 public void setName(String value){
117 this.attributeName = value;
118 }
119
120 /**
121 * Get name.
122 */
123 public String getName()
124 {
125 return attributeName;
126 }
127
128 /**
129 * Set the scope.
130 *
131 * @param scope The new scope.
132 */
133 public void setScope(String scope) {
134 this.scopeName = scope;
135 }
136
137 /**
138 * Get scope.
139 */
140 public String getScope()
141 {
142 return scopeName;
143 }
144
145 /**
146 * Set ignore.
147 */
148 public void setIgnore(boolean ignore)
149 {
150 this.isErrorIgnored = ignore;
151 }
152
153 /**
154 * Get ignore.
155 */
156 public boolean getIgnore()
157 {
158 return isErrorIgnored;
159 }
160
161 // --------------------------------------------------------- Public Methods
162
163
164 /**
165 * Expose the requested attribute from component context.
166 *
167 * @exception JspException if a JSP exception has occurred
168 */
169 public int doStartTag() throws JspException
170 {
171 // Do a local copy of id
172 String localId=this.id;
173 if( localId==null )
174 localId=attributeName;
175
176 ComponentContext compContext = (ComponentContext)pageContext.getAttribute( ComponentConstants.COMPONENT_CONTEXT, PageContext.REQUEST_SCOPE);
177 if( compContext == null )
178 throw new JspException ( "Error - tag useAttribute : no tiles context found." );
179
180 Object value = compContext.getAttribute(attributeName);
181 // Check if value exists and if we must send a runtime exception
182 if( value == null )
183 if(!isErrorIgnored)
184 throw new JspException ( "Error - tag useAttribute : attribute '"+ attributeName + "' not found in context. Check tag syntax" );
185 else
186 return SKIP_BODY;
187
188 if( scopeName != null )
189 {
190 scope = TagUtils.getScope( scopeName, PageContext.PAGE_SCOPE );
191 if(scope!=ComponentConstants.COMPONENT_SCOPE)
192 pageContext.setAttribute(localId, value, scope);
193 }
194 else
195 pageContext.setAttribute(localId, value);
196
197 // Continue processing this page
198 return SKIP_BODY;
199 }
200
201
202
203
204 /**
205 * Clean up after processing this enumeration.
206 *
207 * @exception JspException if a JSP exception has occurred
208 */
209 public int doEndTag() throws JspException
210 {
211 return (EVAL_PAGE);
212 }
213
214 }