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]

Reply via email to