> -----Original Message----- > From: William Shulman [SMTP:[EMAIL PROTECTED]] > Sent: Saturday, May 12, 2001 3:18 AM > To: [EMAIL PROTECTED] > Subject: RE: RE-2: cvs commit: > jakarta-struts/src/share/org/apache/struts/acti on Action.java > ActionForm.java > > > Sounds like another good solution might be to implement a parameter > stack in the request object. The parameter stack is a stack of > Dictionary objects. When parameters are introduced, they are placed > in the Dictionary on the top of the stack. Similarly for lookup. Stack > frames (i.e. the Dictionaries) are pushed and popped appropriately as > you chain. > > Just a thought. There may be some details to work out, but the > solution would be very general and useful in many places. > > -will > > Martin Cooper writes: > > As far as I am aware, you cannot add parameters to the request. > > > > I think storing values as request attributes and then looking there for > > > parameter values would be very dangerous. You could potentially break > > existing code that uses request attributes to store data for chaining > actions. > > > > Incidentally, Hal, I faced a similar problem in chaining actions. What > I > > did was to instantiate a separate form bean and store the chaining > > parameters in that, then use one well-known (between our Actions, I > mean) > > request attribute to store that bean. The chained-to action checks for > that > > bean first, otherwise it uses the one Struts passed to the perform() > method. > > > > -- > > Martin Cooper > > > > > > At 12:38 PM 5/11/01, Deadman, Hal wrote: > > >I thought of that too but I don't know how to add parameters to the > request. > > >Maybe you could use request.setAttribute and store the multi-part > request > > >String parameters as attributes in the requet object. Then code that > looks > > >for parameters could be changed to a method that looks for parameters > or > > >attributes. I don't know if that would help matters much. > > > > > >I use something similar in my application so that I can have an action > that > > >is accessed from a link or from another action. In one case the > paramters > > >are passed on the url and in the other case parameters are passed as > request > > >attributes. The receiving action calls a method that checks for one > and then > > >the other, using the first one it finds. > > > > > > protected String findStringParameter(HttpServletRequest request, > String > > >key) > > > { > > > String value = request.getParameter(key); > > > if (value == null) > > > { > > > value = (String) request.getAttribute(key); > > > } > > > return value; > > > } > > > > > > > -----Original Message----- > > > > From: SCHACHTER,MICHAEL (HP-NewJersey,ex2) > [mailto:[EMAIL PROTECTED]] > > > > Sent: Friday, May 11, 2001 2:19 PM > > > > To: '[EMAIL PROTECTED]' > > > > Subject: RE-2: cvs commit: > > > > jakarta-struts/src/share/org/apache/struts/acti on Action.java > > > > ActionForm.java > > > > > > > > > > > > On second thought, I'm going to toy around with putting the request > > > > parameters > > > > directly into the request from MultipartRequestHandler > > > > instead of using > > > > MultipartRequestHandler itself to store attributes. If I can > > > > get it to work > > > > this will solve all > > > > the problems without adding any new methods to anything, or > changing > > > > anything. > > > > > > > > -----Original Message----- > > > > From: SCHACHTER,MICHAEL (HP-NewJersey,ex2) > > > > Sent: Friday, May 11, 2001 2:08 PM > > > > To: '[EMAIL PROTECTED]' > > > > Subject: RE: cvs commit: > > > > jakarta-struts/src/share/org/apache/struts/action Action.java > > > > ActionForm.java > > > > > > > > > > > > Is this an acceptable resolution to this problem for > > > > everybody? If so, I'll > > > > go ahead and fix the token problem in the Action class, be > > > > creating new > > > > isTokenValid() method that takes an HttpServletRequest and a > > > > MultipartRequestHandler > > > > as arguments, when using it for multipart forms. The other > > > > token methods > > > > don't > > > > need to be changed, as they only deal with retrieiving > > > > session information. > > > > > > > > -----Original Message----- > > > > From: SCHACHTER,MICHAEL (HP-NewJersey,ex2) > [mailto:[EMAIL PROTECTED]] > > > > Sent: Friday, May 11, 2001 1:29 PM > > > > To: '[EMAIL PROTECTED]' > > > > Subject: RE: cvs commit: > > > > jakarta-struts/src/share/org/apache/struts/action Action.java > > > > ActionForm.java > > > > > > > > > > > > Hal, > > > > > > > > It was my understanding that since isCancelled is a protected > > > > method in the > > > > Action class, > > > > that it was the Action developer's job to call the method. > > > > > > > > -----Original Message----- > > > > From: Deadman, Hal [mailto:[EMAIL PROTECTED]] > > > > Sent: Friday, May 11, 2001 1:24 PM > > > > To: [EMAIL PROTECTED] > > > > Subject: RE: cvs commit: > > > > jakarta-struts/src/share/org/apache/struts/action Action.java > > > > ActionForm.java > > > > > > > > > > > > Doesn't the Struts framework need to call this new method > > > > somewhere? The > > > > application code can't call the isCancelled method because > > > > the Action class > > > > code will never be called. If Struts ActionServlet calls the > > > > form validate > > > > when a user clicked cancel, the validation will likely fail > > > > and the user > > > > will be presented with the input form again. Clicking cancel > > > > needs to bypass > > > > the call to the form validate method. If that is done then the new > > > > isCancelled method may be used in the perform method. > > > > > > > > Hal > > > > > > > > > -----Original Message----- > > > > > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]] > > > > > Sent: Friday, May 11, 2001 1:11 PM > > > > > To: [EMAIL PROTECTED] > > > > > Subject: cvs commit: > > > > jakarta-struts/src/share/org/apache/struts/action > > > > > Action.java ActionForm.java > > > > > > > > > > > > > > > mschachter 01/05/11 10:11:06 > > > > > > > > > > Modified: doc todo-1.1.xml > > > > > src/share/org/apache/struts/action Action.java > > > > > ActionForm.java > > > > > Log: > > > > > - Add an isCancelled() method to the Action class that takes a > > > > > MultipartRequestHandler as an argument. This should address > > > > > issues with the html:cancel tag, as long as the new > isCancelled > > > > > method is called on for multipart forms. > > > > > - Add myself to the EJB Design Pattern TODO > > > > > > > > > > Revision Changes Path > > > > > 1.3 +3 -0 jakarta-struts/doc/todo-1.1.xml > > > > > > > > > > Index: todo-1.1.xml > > > > > > > > > =================================================================== > > > > > RCS file: /home/cvs/jakarta-struts/doc/todo-1.1.xml,v > > > > > retrieving revision 1.2 > > > > > retrieving revision 1.3 > > > > > diff -u -r1.2 -r1.3 > > > > > --- todo-1.1.xml 2001/04/12 16:00:42 1.2 > > > > > +++ todo-1.1.xml 2001/05/11 17:10:47 1.3 > > > > > @@ -159,6 +159,9 @@ > > > > > <assigned> > > > > > <a href="mailto:[EMAIL PROTECTED]">Nic > Hobbs</a> > > > > > </assigned> > > > > > + <assigned> > > > > > + <a href="mailto:[EMAIL PROTECTED]">Mike Schachter</a> > > > > > + </assigned> > > > > > </task> > > > > > > > > > > <task name="HTML No-Cache Support"> > > > > > > > > > > > > > > > > > > > > 1.20 +27 -4 > > > > > jakarta-struts/src/share/org/apache/struts/action/Action.java > > > > > > > > > > Index: Action.java > > > > > > > > > =================================================================== > > > > > RCS file: > > > > > /home/cvs/jakarta-struts/src/share/org/apache/struts/action/Ac > > > > > tion.java,v > > > > > retrieving revision 1.19 > > > > > retrieving revision 1.20 > > > > > diff -u -r1.19 -r1.20 > > > > > --- Action.java 2001/02/23 21:13:09 1.19 > > > > > +++ Action.java 2001/05/11 17:10:55 1.20 > > > > > @@ -1,7 +1,7 @@ > > > > > /* > > > > > - * $Header: > > > > > /home/cvs/jakarta-struts/src/share/org/apache/struts/action/Ac > > > > > tion.java,v 1.19 2001/02/23 21:13:09 craigmcc Exp $ > > > > > - * $Revision: 1.19 $ > > > > > - * $Date: 2001/02/23 21:13:09 $ > > > > > + * $Header: > > > > > /home/cvs/jakarta-struts/src/share/org/apache/struts/action/Ac > > > > > tion.java,v 1.20 2001/05/11 17:10:55 mschachter Exp $ > > > > > + * $Revision: 1.20 $ > > > > > + * $Date: 2001/05/11 17:10:55 $ > > > > > * > > > > > * > > > > > > ==================================================================== > > > > > * > > > > > @@ -67,6 +67,7 @@ > > > > > import java.security.MessageDigest; > > > > > import java.security.NoSuchAlgorithmException; > > > > > import java.util.Locale; > > > > > +import java.util.Hashtable; > > > > > import javax.servlet.ServletException; > > > > > import javax.servlet.ServletRequest; > > > > > import javax.servlet.ServletResponse; > > > > > @@ -75,6 +76,7 @@ > > > > > import javax.servlet.http.HttpSession; > > > > > import org.apache.struts.taglib.html.Constants; > > > > > import org.apache.struts.util.MessageResources; > > > > > +import org.apache.struts.upload.MultipartRequestHandler; > > > > > > > > > > > > > > > /** > > > > > @@ -106,7 +108,7 @@ > > > > > * by this Action. > > > > > * > > > > > * @author Craig R. McClanahan > > > > > - * @version $Revision: 1.19 $ $Date: 2001/02/23 21:13:09 $ > > > > > + * @version $Revision: 1.20 $ $Date: 2001/05/11 17:10:55 $ > > > > > */ > > > > > > > > > > public class Action { > > > > > @@ -466,6 +468,27 @@ > > > > > return > > > > > ((request.getParameter(Constants.CANCEL_PROPERTY) != null) || > > > > > > > > > > (request.getParameter(Constants.CANCEL_PROPERTY_X) != null)); > > > > > > > > > > + } > > > > > + > > > > > + /** > > > > > + * Returns <code>true</code> if the current multipart > > > > > form's cancel button was > > > > > + * pressed. This method will check if the cancel > > > > > button generated by > > > > > + * <strong>CancelTag</strong> was pressed by the user in > the > > > > > + * current request. If true, validation performed by an > > > > > + * <strong>ActionForm</strong> validate() method > > > > will have been > > > > > + * skipped by the controller servlet. A > > > > > MultipartRequestHandler instance > > > > > + * can be obtained from a multipart form by calling > > > > > + * {@link ActionForm#getMultipartRequestHandler() > > > > > ActionForm.getMultipartRequestHandler()}. > > > > > + * > > > > > + * @param request The servlet request we are processing > > > > > + * @see org.apache.struts.taglib.CancelTag > > > > > + * @see org.apache.struts.action.ValidatingActionForm > > > > > + */ > > > > > + protected boolean isCancelled(MultipartRequestHandler > > > > > request) { > > > > > + > > > > > + Hashtable elements = request.getTextElements(); > > > > > + return ((elements.get(Constants.CANCEL_PROPERTY) > > > > > != null) || > > > > > + (elements.get(Constants.CANCEL_PROPERTY_X) > > > > > != null)); > > > > > } > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 1.7 +7 -5 > > > > > jakarta-struts/src/share/org/apache/struts/action/ActionForm.java > > > > > > > > > > Index: ActionForm.java > > > > > > > > > =================================================================== > > > > > RCS file: > > > > > /home/cvs/jakarta-struts/src/share/org/apache/struts/action/Ac > > > > > tionForm.java,v > > > > > retrieving revision 1.6 > > > > > retrieving revision 1.7 > > > > > diff -u -r1.6 -r1.7 > > > > > --- ActionForm.java 2001/02/21 00:35:43 1.6 > > > > > +++ ActionForm.java 2001/05/11 17:10:58 1.7 > > > > > @@ -1,7 +1,7 @@ > > > > > /* > > > > > - * $Header: > > > > > /home/cvs/jakarta-struts/src/share/org/apache/struts/action/Ac > > > > > tionForm.java,v 1.6 2001/02/21 00:35:43 craigmcc Exp $ > > > > > - * $Revision: 1.6 $ > > > > > - * $Date: 2001/02/21 00:35:43 $ > > > > > + * $Header: > > > > > /home/cvs/jakarta-struts/src/share/org/apache/struts/action/Ac > > > > > tionForm.java,v 1.7 2001/05/11 17:10:58 mschachter Exp $ > > > > > + * $Revision: 1.7 $ > > > > > + * $Date: 2001/05/11 17:10:58 $ > > > > > * > > > > > * > > > > > > ==================================================================== > > > > > * > > > > > @@ -94,7 +94,7 @@ > > > > > * </p> > > > > > * > > > > > * @author Craig R. McClanahan > > > > > - * @version $Revision: 1.6 $ $Date: 2001/02/21 00:35:43 $ > > > > > + * @version $Revision: 1.7 $ $Date: 2001/05/11 17:10:58 $ > > > > > */ > > > > > > > > > > public abstract class ActionForm implements Serializable { > > > > > @@ -134,7 +134,9 @@ > > > > > * The reasoning behind this is to give form bean > developers > > > > > * control over the lifecycle of their multipart requests > > > > > * through the use of the finish() and/or rollback() > methods > > > > > - * of MultipartRequestHandler > > > > > + * of MultipartRequestHandler. This method will return > > > > > + * <code>null</code> if this form's enctype is not > > > > > + * "multipart/request-data". > > > > > * @see org.apache.struts.upload.MultipartRequestHandler > > > > > */ > > > > > public MultipartRequestHandler > getMultipartRequestHandler() { > > > > > > > > > > > > > > > > > > > > > > > > > > > >