Hello Martin,
a central class in Webflow is PageFlowRequestCycleProcessor:
public class PageFlowRequestCycleProcessor extends WebRequestCycleProcessor
{
/** {@inheritDoc} */
@Override
public IRequestTarget_*resolve*_(RequestCycle requestCycle,
RequestParameters requestParameters)
{
//If Key in URL use it
if(requestParameters.getParameters().containsKey(PageFlowConstants.FLOW_EXECUTION_KEY))
{
String[] flowExecutionKeyParms =
(String[])requestParameters.getParameters().get(PageFlowConstants.FLOW_EXECUTION_KEY);
if(flowExecutionKeyParms.length > 0){
return
RequestTargetFactory.buildFromState(flowExecutionKeyParms[0],
requestCycle, requestParameters);
}
}
IRequestTarget target = super.resolve(requestCycle,
requestParameters);
// If the target is bookmarkable but mounted it needs to go
back and check pageflow
if (target instanceof BookmarkablePageRequestTarget)
{
// BookmarkablePageRequestTarget bookmarkableTarget =
(BookmarkablePageRequestTarget)target;
// if
(PAGE_FLOW_PAGE_CLASS.isAssignableFrom(bookmarkableTarget.getPageClass()) ||
//
PANEL_FLOW_PAGE_CLASS.isAssignableFrom(bookmarkableTarget.getPageClass()))
// {
String currentStateFromSession =
PageFlowSession.get().getFlowState().getCurrentViewState();
return
RequestTargetFactory.buildFromState(currentStateFromSession,
requestCycle, requestParameters);
// }
}
return target;
}
/** {@inheritDoc} */
@Override
protected IRequestTarget _*resolveHomePageTarget*_(RequestCycle
requestCycle, RequestParameters requestParameters)
{
//Grab the target as Wicket would normally calculate it
BookmarkablePageRequestTarget classicTarget
=(BookmarkablePageRequestTarget)
super.resolveHomePageTarget(requestCycle, requestParameters);
BookmarkablePageRequestTarget newTarget =
resolvePageFlowTargets(classicTarget,requestCycle,requestParameters);
//If the target that PageFlow is returning isn't the real home
page we need to redirect to it.
if(!classicTarget.getPageClass().equals(newTarget.getPageClass())){
//Redirect to the homepage if session is trying to go to
the end of the flow since we are restarting it
String currentStateFromSession =
PageFlowSession.get().getFlowState().getCurrentViewState();
if(PageFlowConstants.PAGE_FLOW_FINAL_STATE_DONE.equals(currentStateFromSession)){
//Reset the whole flow state in preparation for a new flow
PageFlowSession.get().resetFlowState();
// This line is to reset the target because the
flowstate was just reset so the url needs to be regenerated
classicTarget =(BookmarkablePageRequestTarget)
super.resolveHomePageTarget(requestCycle, requestParameters);
return classicTarget;
}
throw new
RestartResponseException(newTarget.getPageClass(),
newTarget.getPageParameters());
}
return
resolvePageFlowTargets(classicTarget,requestCycle,requestParameters);
}
/** {@inheritDoc} */
@Override
protected IRequestTarget _*resolveBookmarkablePage*_(RequestCycle
requestCycle, RequestParameters requestParameters)
{
//Grab the target as Wicket would normally calculate it
BookmarkablePageRequestTarget classicTarget
=(BookmarkablePageRequestTarget) super.resolveBookmarkablePage(
requestCycle, requestParameters);
return
resolvePageFlowTargets(classicTarget,requestCycle,requestParameters);
}
/**
* <p>resolvePageFlowTargets.</p>
*
* @param classicTarget a {@link
org.apache.wicket.request.target.component.BookmarkablePageRequestTarget} object.
* @param requestCycle a {@link org.apache.wicket.RequestCycle} object.
* @param requestParameters a {@link
org.apache.wicket.request.RequestParameters} object.
* @return a {@link
org.apache.wicket.request.target.component.BookmarkablePageRequestTarget} object.
*/
protected BookmarkablePageRequestTarget
_resolvePageFlowTargets_(BookmarkablePageRequestTarget classicTarget,
RequestCycle requestCycle, RequestParameters requestParameters)
{
BookmarkablePageRequestTarget target = null;
String currentStateFromSession =
PageFlowSession.get().getFlowState().getCurrentViewState();
//If the target still hasn't been set, target from the user's
session data
if(currentStateFromSession != null)
{
target =
RequestTargetFactory.buildFromState(currentStateFromSession,
requestCycle, requestParameters);
}
//TODO if the target is null, redirect back to the last
rendered page, or the homepage
if(target == null)
{
target = classicTarget;
}
return target;
}
}
For which Mappers should I look in these cases ?
Best regards
Heiner
Am 18.06.2013 11:37, schrieb Piratenvisier:
Thank you Martin.
Now I started another evaluation process after studying spring Webflow
and Seam
an especially this discussion
<http://http://ptrthomas.wordpress.com/2007/03/02/wicket-impressions-moving-from-spring-mvc-webflow/>
lets me think more profoundly about the subject.
In cocoon I tried the flow subject with spring apllicationXML files
After some time with growing XML-structures it was rather tedious to
find out the reason
of a flow problem. In wicket I tried it with HashMap in the
Wicketapplication.
But the maintenance became also tedious. After the above discussion I
think I will try it more with special Components and
and Inheritance.
Best regards
Heiner
Am 16.06.2013 11:36, schrieb Martin Grigorov:
Hi,
Some guys created integration of Wicket 1.4 with Spring WebFlow (
https://github.com/wicketstuff/core/tree/core-1.4.x/jdk-1.5-parent/spring-webflow-parent
).
You may find it interesting and update it to newer versions of both Wicket
and Spring WebFlow.
On Sun, Jun 16, 2013 at 7:34 AM, Piratenvisier
<hansheinrichbr...@yahoo.de>wrote:
Is there any support to structure the flow of pages and forms.
I build for my realestate software structures, defining a state of a page,
the visibility of the links and tabs, the pages a link calls in this state,
database action to be done and the pageparameters
the link tranfers to the new page.
But maybe there are more intelligent ways to organize this.
------------------------------**------------------------------**---------
To unsubscribe,
e-mail:users-unsubscribe@wicket.**apache.org<users-unsubscr...@wicket.apache.org>
For additional commands, e-mail:users-h...@wicket.apache.org