You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by ni...@apache.org on 2006/05/09 01:06:49 UTC
svn commit: r405216 - in /struts/action/trunk:
apps/examples/src/main/webapp/WEB-INF/exercise/
apps/examples/src/main/webapp/exercise/ src/site/xdoc/userGuide/
taglib/src/main/java/org/apache/struts/taglib/html/
Author: niallp
Date: Mon May 8 16:06:48 2006
New Revision: 405216
URL: http://svn.apache.org/viewcvs?rev=405216&view=rev
Log:
Fix for STR-2795 - Postback Forms - caching and modules.
Added:
struts/action/trunk/apps/examples/src/main/webapp/exercise/html-form.jsp (with props)
Modified:
struts/action/trunk/apps/examples/src/main/webapp/WEB-INF/exercise/struts-config.xml
struts/action/trunk/apps/examples/src/main/webapp/exercise/index.html
struts/action/trunk/src/site/xdoc/userGuide/release-notes.xml
struts/action/trunk/taglib/src/main/java/org/apache/struts/taglib/html/FormTag.java
Modified: struts/action/trunk/apps/examples/src/main/webapp/WEB-INF/exercise/struts-config.xml
URL: http://svn.apache.org/viewcvs/struts/action/trunk/apps/examples/src/main/webapp/WEB-INF/exercise/struts-config.xml?rev=405216&r1=405215&r2=405216&view=diff
==============================================================================
--- struts/action/trunk/apps/examples/src/main/webapp/WEB-INF/exercise/struts-config.xml (original)
+++ struts/action/trunk/apps/examples/src/main/webapp/WEB-INF/exercise/struts-config.xml Mon May 8 16:06:48 2006
@@ -77,6 +77,10 @@
name="testbean" scope="session" validate="false">
<forward name="input" path="/html-setters.do"/>
</action>
+ <action path="/html-form" forward="/html-form.jsp"
+ name="testbean" scope="session" validate="false"/>
+ <action path="/html-form-postback" forward="/html-form.jsp"
+ name="testbean" scope="session" validate="false"/>
<action path="/logic-forward" forward="/logic-forward.jsp"/>
<action path="/logic-forward-test-forward"
forward="/logic-forward-test-forward.jsp"/>
Added: struts/action/trunk/apps/examples/src/main/webapp/exercise/html-form.jsp
URL: http://svn.apache.org/viewcvs/struts/action/trunk/apps/examples/src/main/webapp/exercise/html-form.jsp?rev=405216&view=auto
==============================================================================
--- struts/action/trunk/apps/examples/src/main/webapp/exercise/html-form.jsp (added)
+++ struts/action/trunk/apps/examples/src/main/webapp/exercise/html-form.jsp Mon May 8 16:06:48 2006
@@ -0,0 +1,49 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
+<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
+<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
+<html:html>
+ <head>
+ <title>
+ <title>Test struts-html:form Tag</title>
+ </title>
+ <html:base/>
+ </head>
+
+ <body bgcolor="white">
+
+ <p><strong><i>Post Back</i> Form example</strong></p>
+
+ <p>
+ Pressing the Submit button should re-display this page.
+ </p>
+
+ <logic:messagesPresent>
+ <p>
+ <font color="red"><strong>
+ <html:messages id="msg">
+ <bean:write name="msg"/>
+ </html:messages>
+ </strong></font>
+ </p>
+ </logic:messagesPresent>
+
+ <p>
+ <html:form>
+ <html:submit property="submit"/>
+ </html:form>
+ </p>
+ <p>
+ Use the links below to change the <i>postback</i> action (both return
+ to this page).
+ <ul>
+ <li>Switch to <html:link action="html-form">/html-form</html:link></li>
+ <li>Switch to <html:link action="html-form-postback">/html-form-postback</html:link></li>
+ </ul>
+ </p>
+ <hr/>
+
+ <p><html:link action="welcome">Return to the Taglib Exercises main page</html:link></p>
+
+ </body>
+</html:html>
Propchange: struts/action/trunk/apps/examples/src/main/webapp/exercise/html-form.jsp
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: struts/action/trunk/apps/examples/src/main/webapp/exercise/html-form.jsp
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: struts/action/trunk/apps/examples/src/main/webapp/exercise/index.html
URL: http://svn.apache.org/viewcvs/struts/action/trunk/apps/examples/src/main/webapp/exercise/index.html?rev=405216&r1=405215&r2=405216&view=diff
==============================================================================
--- struts/action/trunk/apps/examples/src/main/webapp/exercise/index.html (original)
+++ struts/action/trunk/apps/examples/src/main/webapp/exercise/index.html Mon May 8 16:06:48 2006
@@ -58,6 +58,8 @@
<li><a href="html-messages.do">Errors and Messages</a></li>
+ <li><a href="html-form.do"><html:form></a></li>
+
<li>Other html tags [:TODO:]</li>
</ul>
Modified: struts/action/trunk/src/site/xdoc/userGuide/release-notes.xml
URL: http://svn.apache.org/viewcvs/struts/action/trunk/src/site/xdoc/userGuide/release-notes.xml?rev=405216&r1=405215&r2=405216&view=diff
==============================================================================
--- struts/action/trunk/src/site/xdoc/userGuide/release-notes.xml (original)
+++ struts/action/trunk/src/site/xdoc/userGuide/release-notes.xml Mon May 8 16:06:48 2006
@@ -158,6 +158,7 @@
<li>[<a href='http://issues.apache.org/struts/browse/STR-2741'>STR-2741</a>] - [site] Broken Links</li>
<li>[<a href='http://issues.apache.org/struts/browse/STR-2752'>STR-2752</a>] - forwardPattern implementation missing</li>
<li>[<a href='http://issues.apache.org/struts/browse/STR-2793'>STR-2793</a>] - Postback form (optional 'action' attribute for html-el:form) is not working</li>
+<li>[<a href='http://issues.apache.org/struts/browse/STR-2795'>STR-2795</a>] - Postback Forms - caching and modules</li>
<li>[<a href='http://issues.apache.org/struts/browse/STR-2805'>STR-2805</a>] - java.lang.NullPointerException</li>
<li>[<a href='http://issues.apache.org/struts/browse/STR-2809'>STR-2809</a>] - ImportAttribute does not import all attribute with ignore=true</li>
<li>[<a href='http://issues.apache.org/struts/browse/STR-2826'>STR-2826</a>] - If a field's display property is set to 'none' using CSS or JavaScript, the focus code fails.</li>
Modified: struts/action/trunk/taglib/src/main/java/org/apache/struts/taglib/html/FormTag.java
URL: http://svn.apache.org/viewcvs/struts/action/trunk/taglib/src/main/java/org/apache/struts/taglib/html/FormTag.java?rev=405216&r1=405215&r2=405216&view=diff
==============================================================================
--- struts/action/trunk/taglib/src/main/java/org/apache/struts/taglib/html/FormTag.java (original)
+++ struts/action/trunk/taglib/src/main/java/org/apache/struts/taglib/html/FormTag.java Mon May 8 16:06:48 2006
@@ -41,8 +41,7 @@
* Custom tag that represents an input form, associated with a bean whose
* properties correspond to the various fields of the form.
*
- * @version $Rev$ $Date: 2005-06-22 12:23:18 -0400 (Wed, 22 Jun 2005)
- * $
+ * @version $Rev$ $Date$
*/
public class FormTag extends TagSupport {
/**
@@ -65,6 +64,11 @@
protected String action = null;
/**
+ * A postback action URL to which this form should be submitted, if any.
+ */
+ private String postbackAction = null;
+
+ /**
* The module configuration for our module.
*/
protected ModuleConfig moduleConfig = null;
@@ -406,6 +410,9 @@
* @throws JspException if a JSP exception has occurred
*/
public int doStartTag() throws JspException {
+
+ postbackAction = null;
+
// Look up the form bean name, scope, and type if necessary
this.lookup();
@@ -520,12 +527,13 @@
* Renders the action attribute
*/
protected void renderAction(StringBuffer results) {
+ String calcAction = (this.action == null ? postbackAction : this.action);
HttpServletResponse response =
(HttpServletResponse) this.pageContext.getResponse();
results.append(" action=\"");
results.append(response.encodeURL(
- TagUtils.getInstance().getActionMappingURL(this.action,
+ TagUtils.getInstance().getActionMappingURL(calcAction,
this.pageContext)));
results.append("\"");
@@ -615,6 +623,8 @@
throw new JspException(messages.getMessage("common.io", e.toString()));
}
+ postbackAction = null;
+
// Continue processing this page
return (EVAL_PAGE);
}
@@ -727,15 +737,6 @@
* @throws JspException if a required value cannot be looked up
*/
protected void lookup() throws JspException {
- // If the action is not specified, use the original request uri
- if (this.action == null) {
- HttpServletRequest request =
- (HttpServletRequest) pageContext.getRequest();
- String uri =
- (String) request.getAttribute(Globals.ORIGINAL_URI_KEY);
-
- setAction(uri);
- }
// Look up the module configuration information we need
moduleConfig = TagUtils.getInstance().getModuleConfig(pageContext);
@@ -749,12 +750,28 @@
throw e;
}
+ String calcAction = this.action;
+
+ // If the action is not specified, use the original request uri
+ if (this.action == null) {
+ HttpServletRequest request =
+ (HttpServletRequest) pageContext.getRequest();
+ postbackAction =
+ (String) request.getAttribute(Globals.ORIGINAL_URI_KEY);
+
+ String prefix = moduleConfig.getPrefix();
+ if (postbackAction != null && prefix.length() > 0 && postbackAction.startsWith(prefix)) {
+ postbackAction = postbackAction.substring(prefix.length());
+ }
+ calcAction = postbackAction;
+ }
+
servlet =
(ActionServlet) pageContext.getServletContext().getAttribute(Globals.ACTION_SERVLET_KEY);
// Look up the action mapping we will be submitting to
String mappingName =
- TagUtils.getInstance().getActionMappingName(action);
+ TagUtils.getInstance().getActionMappingName(calcAction);
mapping = (ActionMapping) moduleConfig.findActionConfig(mappingName);
@@ -776,10 +793,10 @@
JspException e = null;
if (mapping.getName() == null) {
- e = new JspException(messages.getMessage("formTag.name", action));
+ e = new JspException(messages.getMessage("formTag.name", calcAction));
} else {
e = new JspException(messages.getMessage("formTag.formBean",
- mapping.getName(), action));
+ mapping.getName(), calcAction));
}
pageContext.setAttribute(Globals.EXCEPTION_KEY, e,