craigmcc    2002/07/05 15:09:21

  Modified:    src/example/org/apache/struts/webapp/example
                        LogonAction.java
               src/share/org/apache/struts/action ActionMapping.java
                        RequestProcessor.java
               web/example/WEB-INF struts-config.xml
  Log:
  Support the new "inputForward" boolean property on ControllerConfig that
  (if set to true) defines the "input" attribute of an <action> element to
  be the name of a local or global forward that is used to calculate the
  ultimate URL to which control is returned on validation errors.  The default
  behavior (false) assumes that the "input" attribute is a subapp-relative
  URL (backwards compatible with the previous behavior).
  
  ActionMapping - Add a new getInputForward() method that will return an
  ActionForward corresponding to the input form, no matter whether or not
  the "inputForward" property is set.  This is useful in Actions that want
  to create "validation error" messages and return to the input form
  themselves, such as LogonAction in the struts-example webapp.
  
  struts-config.xml - The struts-example webapp now sets the "inputForward"
  property to true, and utilizes the new features.
  
  Revision  Changes    Path
  1.10      +5 -5      
jakarta-struts/src/example/org/apache/struts/webapp/example/LogonAction.java
  
  Index: LogonAction.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-struts/src/example/org/apache/struts/webapp/example/LogonAction.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- LogonAction.java  23 Jun 2002 04:59:33 -0000      1.9
  +++ LogonAction.java  5 Jul 2002 22:09:20 -0000       1.10
  @@ -151,7 +151,7 @@
        // Report any errors we have discovered back to the original form
        if (!errors.empty()) {
            saveErrors(request, errors);
  -         return (new ActionForward(mapping.getInput()));
  +            return (mapping.getInputForward());
        }
   
        // Save our logged-in user in the session
  
  
  
  1.25      +21 -4     
jakarta-struts/src/share/org/apache/struts/action/ActionMapping.java
  
  Index: ActionMapping.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/action/ActionMapping.java,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- ActionMapping.java        24 Jun 2002 18:53:01 -0000      1.24
  +++ ActionMapping.java        5 Jul 2002 22:09:21 -0000       1.25
  @@ -170,4 +170,21 @@
       }
   
   
  +    /**
  +     * <p>Create (if necessary) and return an {@link ActionForward} that
  +     * corresponds to the <code>input</code> property of this Action.
  +     *
  +     * @since Struts 1.1b2
  +     */
  +    public ActionForward getInputForward() {
  +
  +        if (getApplicationConfig().getControllerConfig().getInputForward()) {
  +            return (findForward(getInput()));
  +        } else {
  +            return (new ActionForward(getInput()));
  +        }
  +
  +    }
  +
  +
   }
  
  
  
  1.13      +18 -21    
jakarta-struts/src/share/org/apache/struts/action/RequestProcessor.java
  
  Index: RequestProcessor.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/action/RequestProcessor.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- RequestProcessor.java     30 Jun 2002 03:38:29 -0000      1.12
  +++ RequestProcessor.java     5 Jul 2002 22:09:21 -0000       1.13
  @@ -80,6 +80,7 @@
   import org.apache.struts.config.ControllerConfig;
   import org.apache.struts.config.ExceptionConfig;
   import org.apache.struts.config.FormBeanConfig;
  +import org.apache.struts.config.ForwardConfig;
   import org.apache.struts.upload.MultipartRequestWrapper;
   import org.apache.struts.taglib.html.Constants;
   import org.apache.struts.util.MessageResources;
  @@ -396,22 +397,12 @@
               request = ((MultipartRequestWrapper) request).getRequest();
           }
   
  -        String path = forward.getPath();
  +        String uri = RequestUtils.forwardURL(request, forward);
           if (forward.getRedirect()) {
  -            if (path.startsWith("/")) {
  -                if (forward.getContextRelative()) {
  -                    path = request.getContextPath() + path;
  -                } else {
  -                    path = request.getContextPath() +
  -                        appConfig.getPrefix() + path;
  -                }
  -            }
  -            response.sendRedirect(response.encodeRedirectURL(path));
  +            response.sendRedirect
  +                (response.encodeRedirectURL(request.getContextPath() + uri));
           } else {
  -            if (path.startsWith("/") && !forward.getContextRelative()) {
  -                path = appConfig.getPrefix() + path;
  -            }
  -            doForward( path, request, response);
  +            doForward(uri, request, response);
           }
   
       }
  @@ -949,7 +940,13 @@
           if (request instanceof MultipartRequestWrapper) {
               request = ((MultipartRequestWrapper) request).getRequest();
           }
  -        String uri = appConfig.getPrefix() + input;
  +        String uri = null;
  +        if (appConfig.getControllerConfig().getInputForward()) {
  +            ForwardConfig forward = mapping.findForward(input);
  +            uri = RequestUtils.forwardURL(request, forward);
  +        } else {
  +            uri = appConfig.getPrefix() + input;
  +        }
           doForward(uri, request, response);
           return (false);
   
  @@ -958,7 +955,7 @@
       /**
        * Do a forward to specified uri using request dispatcher.
        * This method is used by all internal method needi
  -     * @param uri Uri or Definition name to forward
  +     * @param uri Context-relative URI to forward to
        * @param request Current page request
        * @param response Current page response
        * @since Struts 1.1
  @@ -982,7 +979,7 @@
       /**
        * Do an include of specified uri using request dispatcher.
        * This method is used by all internal method needi
  -     * @param uri Uri of page to include
  +     * @param uri Context-relative URI to include
        * @param request Current page request
        * @param response Current page response
        * @since Struts 1.1
  
  
  
  1.23      +14 -3     jakarta-struts/web/example/WEB-INF/struts-config.xml
  
  Index: struts-config.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-struts/web/example/WEB-INF/struts-config.xml,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- struts-config.xml 16 Jun 2002 04:43:19 -0000      1.22
  +++ struts-config.xml 5 Jul 2002 22:09:21 -0000       1.23
  @@ -72,6 +72,7 @@
     <global-forwards>
       <forward   name="logoff"               path="/logoff.do"/>
       <forward   name="logon"                path="/logon.jsp"/>
  +    <forward   name="registration"         path="/registration.jsp"/>
       <forward   name="success"              path="/mainMenu.jsp"/>
     </global-forwards>
   
  @@ -109,7 +110,7 @@
                  type="org.apache.struts.webapp.example.LogonAction"
                  name="logonForm"
                 scope="request"
  -              input="/logon.jsp">
  +              input="logon">
         <exception
                   key="expired.password"
                  type="org.apache.struts.webapp.example.ExpiredPasswordException"
  @@ -121,14 +122,15 @@
                  type="org.apache.struts.webapp.example.SaveRegistrationAction"
                  name="registrationForm"
                 scope="request"
  -              input="/registration.jsp"/>
  +              input="registration"/>
   
       <!-- Save mail subscription -->
       <action    path="/saveSubscription"
                  type="org.apache.struts.webapp.example.SaveSubscriptionAction"
                  name="subscriptionForm"
                 scope="request"
  -              input="/subscription.jsp">
  +              input="subscription">
  +      <forward name="subscription"    path="/subscription.jsp"/>
         <forward name="success"         path="/editRegistration.do?action=Edit"/>
       </action>
   
  @@ -139,6 +141,15 @@
       </action>
   
     </action-mappings>
  +
  +
  +  <!-- ========== Controller Configuration ================================ -->
  +
  +  <controller>
  +    <!-- The "input" parameter on "action" elements is the name of a
  +         local or global "forward" rather than a subapp-relative path -->
  +    <set-property property="inputForward" value="true"/>
  +  </controller>
   
   
     <!-- ========== Message Resources Definitions =========================== -->
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to