1 /*
2 * $Id: GetAttributeTag.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
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 // Check role
149 if(role != null && !((HttpServletRequest)pageContext.getRequest()).isUserInRole(role) )
150 {
151 return EVAL_PAGE;
152 } // end if
153
154 // Get context
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 { // no value : throw error or fail silently according to ignore
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 } // end if
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 }