001: /*
002: * Copyright (C) 2006 Methodhead Software LLC. All rights reserved.
003: *
004: * This file is part of TransferCM.
005: *
006: * TransferCM is free software; you can redistribute it and/or modify it under the
007: * terms of the GNU General Public License as published by the Free Software
008: * Foundation; either version 2 of the License, or (at your option) any later
009: * version.
010: *
011: * TransferCM is distributed in the hope that it will be useful, but WITHOUT ANY
012: * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
013: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
014: * details.
015: *
016: * You should have received a copy of the GNU General Public License along with
017: * TransferCM; if not, write to the Free Software Foundation, Inc., 51 Franklin St,
018: * Fifth Floor, Boston, MA 02110-1301 USA
019: */
020:
021: package com.methodhead.transfer;
022:
023: import java.io.IOException;
024:
025: import javax.servlet.http.HttpServletRequest;
026: import javax.servlet.http.HttpServletResponse;
027: import javax.servlet.http.HttpSession;
028: import javax.servlet.jsp.JspException;
029: import javax.servlet.jsp.JspWriter;
030: import javax.servlet.jsp.PageContext;
031: import javax.servlet.jsp.tagext.TagSupport;
032:
033: import org.apache.struts.Globals;
034: import org.apache.struts.action.ActionForm;
035: import org.apache.struts.action.ActionMapping;
036: import org.apache.struts.action.ActionServlet;
037: import org.apache.struts.config.FormBeanConfig;
038: import org.apache.struts.config.ModuleConfig;
039: import org.apache.struts.util.MessageResources;
040: import org.apache.struts.util.RequestUtils;
041: import org.apache.struts.util.ResponseUtils;
042:
043: /**
044: * Extends Struts' <code>FormTag</code> to add module attribute, which is used
045: * to lookup the correct <code>ModuleConfig</code>. This situation arises when
046: * extensions, implemented in Struts modules, forward to a shim page (.shtml)
047: * to display their form. Since pages are displayed by PageAction, part of the
048: * root Struts module, the form tag must explicitly be told which module to
049: * look for action mappings in.
050: */
051: public class FormTag extends org.apache.struts.taglib.html.FormTag {
052:
053: // constructors /////////////////////////////////////////////////////////////
054:
055: // constants ////////////////////////////////////////////////////////////////
056:
057: // classes //////////////////////////////////////////////////////////////////
058:
059: // methods //////////////////////////////////////////////////////////////////
060:
061: /**
062: * Overrides default behaviour to render a relative URL for the action.
063: * This is combined with the base tag inserted by the Shim head tag to make
064: * the proper request.
065: */
066: protected String renderFormStartElement() {
067: HttpServletResponse response = (HttpServletResponse) this .pageContext
068: .getResponse();
069:
070: StringBuffer results = new StringBuffer("<form");
071: results.append(" name=\"");
072: results.append(beanName);
073: results.append("\"");
074: results.append(" method=\"");
075: results.append(method == null ? "post" : method);
076: results.append("\" action=\"");
077:
078: //
079: // BEGIN shim hack
080: //
081:
082: //
083: // insert the module prefix and print the result as a relative url
084: //
085: ModuleConfig config = (ModuleConfig) pageContext.getRequest()
086: .getAttribute(Globals.MODULE_KEY);
087:
088: if (config != null) {
089: results.append(config.getPrefix().substring(1) + "/");
090: }
091:
092: results.append(response.encodeURL(this .action.substring(1)
093: + ".do"));
094:
095: //
096: // END shim hack
097: //
098:
099: results.append("\"");
100:
101: if (styleClass != null) {
102: results.append(" class=\"");
103: results.append(styleClass);
104: results.append("\"");
105: }
106: if (enctype != null) {
107: results.append(" enctype=\"");
108: results.append(enctype);
109: results.append("\"");
110: }
111: if (onreset != null) {
112: results.append(" onreset=\"");
113: results.append(onreset);
114: results.append("\"");
115: }
116: if (onsubmit != null) {
117: results.append(" onsubmit=\"");
118: results.append(onsubmit);
119: results.append("\"");
120: }
121: if (style != null) {
122: results.append(" style=\"");
123: results.append(style);
124: results.append("\"");
125: }
126: if (styleId != null) {
127: results.append(" id=\"");
128: results.append(styleId);
129: results.append("\"");
130: }
131: if (target != null) {
132: results.append(" target=\"");
133: results.append(target);
134: results.append("\"");
135: }
136: results.append(">");
137: return results.toString();
138: }
139:
140: // properties ///////////////////////////////////////////////////////////////
141:
142: // attributes ///////////////////////////////////////////////////////////////
143: }
|