View Javadoc

1   /*
2    * $Id: RedirectTag.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  package org.apache.struts.taglib.logic;
22  
23  import org.apache.struts.taglib.TagUtils;
24  import org.apache.struts.util.MessageResources;
25  
26  import javax.servlet.http.HttpServletResponse;
27  import javax.servlet.jsp.JspException;
28  import javax.servlet.jsp.tagext.TagSupport;
29  
30  import java.io.IOException;
31  
32  import java.net.MalformedURLException;
33  
34  import java.util.Map;
35  
36  /**
37   * Generate a URL-encoded redirect to the specified URI.
38   *
39   * @version $Rev: 471754 $ $Date: 2004-10-16 12:38:42 -0400 (Sat, 16 Oct 2004)
40   *          $
41   */
42  public class RedirectTag extends TagSupport {
43      /**
44       * The message resources for this package.
45       */
46      protected static MessageResources messages =
47          MessageResources.getMessageResources(
48              "org.apache.struts.taglib.logic.LocalStrings");
49  
50      // ------------------------------------------------------------- Properties
51  
52      /**
53       * The anchor to be added to the end of the generated hyperlink.
54       */
55      protected String anchor = null;
56  
57      /**
58       * The logical forward name from which to retrieve the redirect URI.
59       */
60      protected String forward = null;
61  
62      /**
63       * The redirect URI.
64       */
65      protected String href = null;
66  
67      /**
68       * The JSP bean name for query parameters.
69       */
70      protected String name = null;
71  
72      /**
73       * The module-relative page URL (beginning with a slash) to which this
74       * redirect will be rendered.
75       */
76      protected String page = null;
77  
78      /**
79       * The module-relative action (beginning with a slash) which will be
80       * called by this link
81       */
82      protected String action = null;
83  
84      /**
85       * The module prefix (beginning with a slash) which will be used to find
86       * the action for this link.
87       */
88      protected String module = null;
89  
90      /**
91       * The single-parameter request parameter name to generate.
92       */
93      protected String paramId = null;
94  
95      /**
96       * The single-parameter JSP bean name.
97       */
98      protected String paramName = null;
99  
100     /**
101      * The single-parameter JSP bean property.
102      */
103     protected String paramProperty = null;
104 
105     /**
106      * The single-parameter JSP bean scope.
107      */
108     protected String paramScope = null;
109 
110     /**
111      * The JSP bean property name for query parameters.
112      */
113     protected String property = null;
114 
115     /**
116      * The scope of the bean specified by the name property, if any.
117      */
118     protected String scope = null;
119 
120     /**
121      * Include our transaction control token?
122      */
123     protected boolean transaction = false;
124 
125     /**
126      * Use character encoding from ServletResponse#getCharacterEncoding to get
127      * bytes of the url string for urlencoding?
128      */
129     protected boolean useLocalEncoding = false;
130 
131     public String getAnchor() {
132         return (this.anchor);
133     }
134 
135     public void setAnchor(String anchor) {
136         this.anchor = anchor;
137     }
138 
139     public String getForward() {
140         return (this.forward);
141     }
142 
143     public void setForward(String forward) {
144         this.forward = forward;
145     }
146 
147     public String getHref() {
148         return (this.href);
149     }
150 
151     public void setHref(String href) {
152         this.href = href;
153     }
154 
155     public String getName() {
156         return (this.name);
157     }
158 
159     public void setName(String name) {
160         this.name = name;
161     }
162 
163     public String getPage() {
164         return (this.page);
165     }
166 
167     public void setPage(String page) {
168         this.page = page;
169     }
170 
171     public String getAction() {
172         return (this.action);
173     }
174 
175     public void setAction(String action) {
176         this.action = action;
177     }
178 
179     public String getModule() {
180         return (this.module);
181     }
182 
183     public void setModule(String module) {
184         this.module = module;
185     }
186 
187     public String getParamId() {
188         return (this.paramId);
189     }
190 
191     public void setParamId(String paramId) {
192         this.paramId = paramId;
193     }
194 
195     public String getParamName() {
196         return (this.paramName);
197     }
198 
199     public void setParamName(String paramName) {
200         this.paramName = paramName;
201     }
202 
203     public String getParamProperty() {
204         return (this.paramProperty);
205     }
206 
207     public void setParamProperty(String paramProperty) {
208         this.paramProperty = paramProperty;
209     }
210 
211     public String getParamScope() {
212         return (this.paramScope);
213     }
214 
215     public void setParamScope(String paramScope) {
216         this.paramScope = paramScope;
217     }
218 
219     public String getProperty() {
220         return (this.property);
221     }
222 
223     public void setProperty(String property) {
224         this.property = property;
225     }
226 
227     public String getScope() {
228         return (this.scope);
229     }
230 
231     public void setScope(String scope) {
232         this.scope = scope;
233     }
234 
235     public boolean getTransaction() {
236         return (this.transaction);
237     }
238 
239     public void setTransaction(boolean transaction) {
240         this.transaction = transaction;
241     }
242 
243     public boolean isUseLocalEncoding() {
244         return useLocalEncoding;
245     }
246 
247     public void setUseLocalEncoding(boolean b) {
248         useLocalEncoding = b;
249     }
250 
251     // --------------------------------------------------------- Public Methods
252 
253     /**
254      * Defer generation until the end of this tag is encountered.
255      *
256      * @throws JspException if a JSP exception has occurred
257      */
258     public int doStartTag() throws JspException {
259         return (SKIP_BODY);
260     }
261 
262     /**
263      * Render the redirect and skip the remainder of this page.
264      *
265      * @throws JspException if a JSP exception has occurred
266      */
267     public int doEndTag() throws JspException {
268         this.doRedirect(this.generateRedirectURL());
269 
270         return (SKIP_PAGE);
271     }
272 
273     /**
274      * Calculate the url to redirect to.
275      *
276      * @throws JspException
277      * @since Struts 1.2
278      */
279     protected String generateRedirectURL()
280         throws JspException {
281         Map params =
282             TagUtils.getInstance().computeParameters(pageContext, paramId,
283                 paramName, paramProperty, paramScope, name, property, scope,
284                 transaction);
285 
286         String url = null;
287 
288         try {
289             url = TagUtils.getInstance().computeURLWithCharEncoding(pageContext,
290                     forward, href, page, action, module, params, anchor, true,
291                     useLocalEncoding);
292         } catch (MalformedURLException e) {
293             TagUtils.getInstance().saveException(pageContext, e);
294             throw new JspException(messages.getMessage("redirect.url",
295                     e.toString()));
296         }
297 
298         return url;
299     }
300 
301     /**
302      * Redirect to the given url converting exceptions to JspException.
303      *
304      * @param url The path to redirect to.
305      * @throws JspException
306      * @since Struts 1.2
307      */
308     protected void doRedirect(String url)
309         throws JspException {
310         HttpServletResponse response =
311             (HttpServletResponse) pageContext.getResponse();
312 
313         try {
314             response.sendRedirect(url);
315         } catch (IOException e) {
316             TagUtils.getInstance().saveException(pageContext, e);
317             throw new JspException(e.getMessage());
318         }
319     }
320 
321     /**
322      * Release any acquired resources.
323      */
324     public void release() {
325         super.release();
326         anchor = null;
327         forward = null;
328         href = null;
329         name = null;
330         page = null;
331         action = null;
332         paramId = null;
333         paramName = null;
334         paramProperty = null;
335         paramScope = null;
336         property = null;
337         scope = null;
338     }
339 }