Thanks Patrick, I'm interested to see how this will go, any light that
Bob could shed would be useful.

dave

On Wed, 2006-06-07 at 11:23 -0500, Patrick Lightbody wrote:
> Dave,
> I think you are thinking about this the same way we are. Bob Lee and I agreed 
> when we met up during JavaOne that there should be just one stack to handle 
> 90% of the needs of users. The actual logical differences in the stack (form 
> submit vs. "view") should be handled by conventions and/or configuration 
> (either XML or annotations). Your marker interface, Submittable, represents 
> that same line of thought.
> 
> I'll ask Bob to comment on what his thoughts are around this.
> 
> Patrick
> 
> > Hello all,
> > 
> > On this page:
> > http://wiki.apache.org/struts/StrutsActionRelease200
> > 
> > There is, under the new features heading a reference
> > to the
> > validation/workflow issues brought up on this page:
> > http://wiki.apache.org/struts/RoughSpots?action=show
> > 
> > Under the main list, item number 16, and under
> > Patrick's list, item
> > number 4 and 5, there is discussion of the default
> > workflow and its
> > relation to the idea of view vs. update requests to
> > the same action.
> > 
> > I haven't seen any discussion of this on the dev
> > list, and i'm wondering
> > if anyone is actively working on this and what
> > directions are being
> > considered. In trying to work this out for myself, i
> > came up with a
> > simple solution for the main use case, and i would
> > like to share it here
> > and ask for comments. 
> > 
> > The main idea is that the Prepareable interceptor is
> > used to setup the
> > view, and another interceptor called
> > SubmittableInterceptor is added to
> > the end of the default interceptor stack and is used
> > to determine if a
> > form submission has occured. A marker interface
> > called Submittable
> > allows the user, via a boolean wasSubmitted method,
> > to determine how the
> > action will determine if a form submission has
> > occured, whether it be
> > the POST vs GET idea, the inclusion of a hidden flag
> > field, or the
> > presence of a submit or button parameter. It also has
> > a "submit" method
> > that can be used optionally to process the submission
> > and return a
> > result string. 
> > 
> > The SubmittableInterceptor will see if wasSubmitted
> > returns true, and if
> > so, run the submit method. If the submit method
> > returns a result string,
> > the interceptor returns that, otherwise the
> > interceptor stack invocation
> > continues. If the form was not submitted, the
> > interceptor returns the
> > INPUT result, displaying the form, which has been
> > setup by Prepareable.
> > 
> > My BaseAction extends ActionSupport and implements
> > Submittable and
> > allows for the inclusion of the
> > SubmittableInterceptor into the default
> > stack, with default behavior that does nothing.
> > 
> > The Validate method of the action will also check
> > wasSubmitted to
> > determine if it should validate, this could be
> > eliminated by either
> > putting SubmittableInterceptor before the
> > DefaultWorkflowInterceptor or
> > by putting the SubmittableInterceptor logic in
> > DefaultWorkflowInterceptor.
> > 
> > The code:
> > 
> > [code]
> > public interface Submittable {
> > 
> >     boolean wasSubmitted();
> > String submit();
> > }
> > [/code]
> > 
> > SubmittableInterceptor intercept method:
> > 
> > [code]
> > public String intercept(ActionInvocation invocation)
> > throws Exception {
> >    Object action = invocation.getAction();
> >   if (action instanceof Submittable) {
> >     Submittable submittable = (Submittable) action;
> >   if (submittable.wasSubmitted()) {
> >        String submitResult = submittable.submit();
> > if (submitReturn != null && !
> > submitReturn.equals("")) {
> >             return submitResult;
> >       }
> > else {
> >          return Action.INPUT;
> >    }
> >   return invocation.invoke();
> > 
> > 
> > public class BaseAction extends ActionSupport
> > implements Submittable  {
> > 
> >     public boolean wasSubmitted() {
> >     return true;
> > }
> > 
> >     public String submit() {
> >     return null;
> > }
> > }
> > 
> > public class TesterAction extends BaseAction
> > implements Preparable,
> > ServletRequestAware  {
> > 
> >     private HttpServletRequest request;
> > public void setServletRequest(HttpServletRequest r)
> >  {
> >       this.request = r;
> > 
> > 
> >     private String act = "";
> > private String name = "";
> > 
> >     public String getAct() {
> >    return this.act;
> >  }
> >    public void setAct(String s) {
> >     this.act = s;
> > }
> > 
> >     public String getName() {
> >    return this.name;
> >  }
> >    public void setName(String s) {
> >     this.name = s;
> > }
> > 
> >     public void validate() {
> >    if (wasSubmitted()) {
> >        if (name.equals("")) {
> >       addFieldError("name", "required");
> >     }
> >    }
> >  }
> > 
> >     public void prepare() {
> >    // setup view
> >     request.setAttribute("form_name", "Test Form");
> > }
> > 
> >     public boolean wasSubmitted() {
> >    if (act.equals("")) {
> >        return false;
> > }
> >        else {
> >    return true;
> >     }
> > }
> > 
> >     public String submit() {
> >    // allow execute to do business logic
> >     return null;
> > }
> > 
> >     public String execute() throws Exception {
> >    // do business logic
> >     return SUCCESS;
> > }
> > }
> > [/code]
> > 
> > 
> > 
> > ------------------------------------------------------
> > ---------------
> > To unsubscribe, e-mail:
> > [EMAIL PROTECTED]
> > For additional commands, e-mail:
> > [EMAIL PROTECTED]
> ---------------------------------------------------------------------
> Posted via Jive Forums
> http://forums.opensymphony.com/thread.jspa?threadID=33417&messageID=65333#65333
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 


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

Reply via email to