jeudi 5 mars 2015

Transition to parameterized webflow view state from global menu

Background


Simple menu system with links that should display specific report parameter pages. Here's how it works:



  1. The user clicks the "Search" menu, switching to the System Search web flow.

  2. The user clicks a "Reports" sub-menu (e.g., "Errors Encountered...").

  3. The user is taken to the Errors Encountered report.


Menu


The reports-flow.xml contains:



<view-state id="list" view="flow/reports/list">
<transition on="parameters" to="parameters">
<set name="flowScope.reportKey" value="requestParameters.key" />
<evaluate expression="reportService.createReport()" result="flowScope.report" />
</transition>
</view-state>

<view-state id="parameters" model="report" view="flow/reports/parameters">
<on-render>
<set name="viewScope.pageId" value="'osre02'" />
<evaluate expression="siteService.find()" result="viewScope.siteList" />
<evaluate expression="agencyService.findActiveMunicipalities()" result="viewScope.municipalityList" />
</on-render>

<transition on="run" to="redirect" />
</view-state>


The flow/reports/list page contains:



<li><a href="${flowExecutionUrl}&amp;_eventId=parameters&amp;key=report_name">Report Name</a></li>


Problem


None of the following work to exit the system search web flow and enter the report web flow while passing the report parameter key.



<a href="reports?_flowId=reports&_eventId=parameters&key=report_name">Report Name</a>
<a href="reports?_eventId=parameters&key=report_name">Report Name</a>
<a href="reports?execution=${flowExecutionKey}&amp;_eventId=parameters&key=report_name">Report Name</a>
<a href="${flowExecutionUrl}&amp;_eventId=parameters&key=report_name">Report Name</a>


Error


From the System Search web flow, the following error appears:



Request processing failed; nested exception is org.springframework.webflow.engine.NoMatchingTransitionException: No transition found on occurence of event 'parameters' in state 'criteria' of flow 'flow/sessionSearch' -- valid transitional criteria are array[search, today] ...etc.



This error goes away when clicking one of the menu links while already in the report flow. This makes sense because the System Search doesn't know about the reports flow nor the menu (ideally, it shouldn't).


Idea


To make the reports flow resolve as a global menu, a global-transition can be set up as follows:



<global-transitions>
<transition on="parameters" to="parameters">
<set name="flowScope.reportKey" value="requestParameters.key" />
<evaluate expression="reportService.createReport()" result="flowScope.report" />
</transition>
</global-transitions>


And the file configuration autowired using:



@Configuration
public class SharedWebFlowConfig extends AbstractFlowConfiguration {
@Bean
public FlowDefinitionRegistry sharedFlowRegistry() {
return getFlowDefinitionRegistryBuilder().addFlowLocation("/WEB-INF/flow/common/global-transitions.xml", "global-transitions").build();
}
}


Question


The set-up described in the idea section results in the following error:



java.lang.IllegalArgumentException: Cannot find state with id 'parameters' in flow 'flow/sessionSearch' -- Known state ids ...



How do you make the parameters view-state from the reports-flow.xml global?


What would be a better approach?


Aucun commentaire:

Enregistrer un commentaire