Save This Page
Home » struts-1.3.9-src » org.apache.struts » chain » commands » [javadoc | source]
    1   /*
    2    * $Id: AbstractPopulateActionForm.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.chain.commands;
   22   
   23   import org.apache.struts.Globals;
   24   import org.apache.struts.action.ActionForm;
   25   import org.apache.struts.chain.contexts.ActionContext;
   26   import org.apache.struts.config.ActionConfig;
   27   
   28   import java.util.Map;
   29   
   30   /**
   31    * <p>Populate the form bean (if any) for this request.</p>
   32    *
   33    * @version $Rev: 471754 $ $Date: 2005-11-12 13:01:44 -0500 (Sat, 12 Nov 2005)
   34    *          $
   35    */
   36   public abstract class AbstractPopulateActionForm extends ActionCommandBase {
   37       // ---------------------------------------------------------- Public Methods
   38   
   39       /**
   40        * <p>Populate the form bean (if any) for this request.</p>
   41        *
   42        * @param actionCtx The <code>Context</code> for the current request
   43        * @return <code>false</code> so that processing continues
   44        * @throws Exception On an unexpected error
   45        */
   46       public boolean execute(ActionContext actionCtx)
   47           throws Exception {
   48           // Is there a form bean for this request?
   49           ActionForm actionForm = actionCtx.getActionForm();
   50   
   51           if (actionForm == null) {
   52               return (false);
   53           }
   54   
   55           // Reset the form bean property values
   56           ActionConfig actionConfig = actionCtx.getActionConfig();
   57   
   58           reset(actionCtx, actionConfig, actionForm);
   59   
   60           populate(actionCtx, actionConfig, actionForm);
   61   
   62           handleCancel(actionCtx, actionConfig, actionForm);
   63   
   64           return (false);
   65       }
   66   
   67       // ------------------------------------------------------- Protected Methods
   68   
   69       /**
   70        * <p>Call the <code>reset()</code> method on the specified form
   71        * bean.</p>
   72        *
   73        * @param context      The context for this request
   74        * @param actionConfig The actionConfig for this request
   75        * @param actionForm   The form bean for this request
   76        */
   77       protected abstract void reset(ActionContext context,
   78           ActionConfig actionConfig, ActionForm actionForm);
   79   
   80       /**
   81        * <p> Populate the given <code>ActionForm</code> with request parameter
   82        * values, taking into account any prefix/suffix values configured on the
   83        * given <code>ActionConfig</code>. </p>
   84        *
   85        * @param context      The ActionContext we are processing
   86        * @param actionConfig The ActionConfig we are processing
   87        * @param actionForm   The ActionForm we are processing
   88        * @throws Exception On an unexpected error
   89        */
   90       protected abstract void populate(ActionContext context,
   91           ActionConfig actionConfig, ActionForm actionForm)
   92           throws Exception;
   93   
   94       // original implementation casting context to WebContext is not safe
   95       // when the input value is an ActionContext.
   96   
   97       /**
   98        * <p>For a given request parameter name, trim off any prefix and/or
   99        * suffix which are defined in <code>actionConfig</code> and return what
  100        * remains. If either prefix or suffix is defined, then return null for
  101        * <code>name</code> values which do not begin or end accordingly.</p>
  102        *
  103        * @param actionConfig The ActionConfig we are processing
  104        * @param name         The request parameter name to proceess
  105        * @return The request parameter name trimmed of any suffix or prefix
  106        */
  107       protected String trimParameterName(ActionConfig actionConfig, String name) {
  108           String stripped = name;
  109           String prefix = actionConfig.getPrefix();
  110           String suffix = actionConfig.getSuffix();
  111   
  112           if (prefix != null) {
  113               if (!stripped.startsWith(prefix)) {
  114                   return null;
  115               }
  116   
  117               stripped = stripped.substring(prefix.length());
  118           }
  119   
  120           if (suffix != null) {
  121               if (!stripped.endsWith(suffix)) {
  122                   return null;
  123               }
  124   
  125               stripped =
  126                   stripped.substring(0, stripped.length() - suffix.length());
  127           }
  128   
  129           return stripped;
  130       }
  131   
  132       /**
  133        * <p>Take into account whether the request includes any defined value for
  134        * the global "cancel" parameter.</p> <p> An issue was raised (but I don't
  135        * think a Bugzilla ticket created) about the security implications of
  136        * using a well-known cancel property which skips form validation, as you
  137        * may not write your actions to deal with the cancellation case. </p>
  138        *
  139        * @param context      The ActionContext we are processing
  140        * @param actionConfig The ActionConfig we are processing
  141        * @param actionForm   The ActionForm we are processing
  142        * @throws Exception On an unexpected error
  143        * @see Globals.CANCEL_PROPERTY
  144        * @see Globals.CANCEL_PROPERTY_X
  145        */
  146       protected void handleCancel(ActionContext context,
  147           ActionConfig actionConfig, ActionForm actionForm)
  148           throws Exception {
  149           Map paramValues = context.getParameterMap();
  150   
  151           // Set the cancellation attribute if appropriate
  152           if ((paramValues.get(Globals.CANCEL_PROPERTY) != null)
  153               || (paramValues.get(Globals.CANCEL_PROPERTY_X) != null)) {
  154               context.setCancelled(Boolean.TRUE);
  155           } else {
  156               context.setCancelled(Boolean.FALSE);
  157           }
  158       }
  159   }

Save This Page
Home » struts-1.3.9-src » org.apache.struts » chain » commands » [javadoc | source]