Hi All,

As you may know or not, T5 doesn't have a web flow framework like the Spring
one yet. Howard mentioned he may add it in the next release. However, our
project cannot wait for that, therefore I have created a simple one on T5.
Here is the general idea, your comments are **GREATLY APPRECIATED**.

* A WEBFLOW, which is a normal T5 page,  injects and contains PAGEs that
will used in this web flow.

* A PAGE can be used in multiple web flows. A PAGE doesn't have any
knowledge of where to go for next page, previous page or cancel link. All
these knowledge are dynamically populated from a WEBFLOW. 

* A WEBFLOW has some data objects, which are annotated as @ApplicationState.
PAGEs can pick up whatever data they are interested, display them or
populate them.

* A typical request flow is like below:
=> An action request is post back to a PAGE
=> A PAGE will do some validation and populate the data 
=> In onSuccess() method in PAGE, it returns the next page link, which is
populated by WEBFLOW and pointing to an action in WEBFLOW
=> A redirection action request is sent to WEBFLOW
=> Some onPage() method in WEBFLOW is triggered. It could review the data ,
decide the next page and return it.
=> A page render request is sent to the next page

Here are some code snippets :
============
public class WebFlow
{
        @InjectPage
        private WebFlowPage1 page1;

        @InjectPage
        private WebFlowPage2 page2;

        @InjectPage
        private WebFlowPage3 page3;

        @SuppressWarnings("unused")
        @ApplicationState
        private SomeObject data;
        ...

        private Object onStartPage()
        {
                page1.setNextPage( componentResources.createActionLink( 
"page1", false )
);
                page1.setCancelLink( componentResources.createActionLink( 
"cancel", false
) );

                return page1;
        }

        @SuppressWarnings("unused")
        private Object onPage1()
        {
                page2.setNextPage( componentResources.createActionLink( 
"page2", false )
);
                page2.setPreviousPage( componentResources.createActionLink( 
"startPage",
false ) );
                page2.setCancelLink( componentResources.createActionLink( 
"cancel", false
) );

                return this.page2;
        }

        @SuppressWarnings("unused")
        private Object onCancel()
        {
                this.clean();
                return this;
        }
        ....
}

public class WebFlowPage1 {
        @Persist
        private Link nextPage;

        @Persist
        private Link previousPage;

        @Persist
        private Link cancelLink;

        @ApplicationState
        private SomeObject data;

        @SuppressWarnings("unused")
        private Link onSuccess()
        {
                ....
                return nextPage;
        }

        @SuppressWarnings("unused")
        private Object onActionFromPreviousPage()
        {
                ...
                return previousPage;
        }

        @SuppressWarnings("unused")
        private Object onActionFromCancel()
        {
                return cancelLink;
        }

        ...
}

--------------------

Cheers,
Jeffrey Ai
-- 
View this message in context: 
http://www.nabble.com/T5%3A-A-web-flow-idea-on-T5-tp14442158p14442158.html
Sent from the Tapestry - User mailing list archive at Nabble.com.


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

Reply via email to