Announcement Announcement Module
Collapse
No announcement yet.
The source state 'CancelPage' to transition from must be transitionable! Page Title Module
Move Remove Collapse
X
Conversation Detail Module
Collapse
  • Filter
  • Time
  • Show
Clear All
new posts

  • The source state 'CancelPage' to transition from must be transitionable!

    I have a strange problem that I fear is a bug.

    Below is my masterFlow.xml document, what happens is that when the flow
    transitions to one of the end-states it throws the following exception.

    It looks to me like it's confusing the source and target states, any idea why?

    Code:
    java.lang.IllegalStateException: The source state 'CancelPage' to transition from must be transitionable!
    	at org.springframework.webflow.support.TransitionExecutingStateExceptionHandler.handle(TransitionExecutingStateExceptionHandler.java:100)
    	at org.springframework.webflow.FlowExecutionExceptionHandlerSet.handleException(FlowExecutionExceptionHandlerSet.java:116)
    	at org.springframework.webflow.Flow.handleException(Flow.java:649)
    	at org.springframework.webflow.execution.impl.FlowExecutionImpl.tryFlowHandlers(FlowExecutionImpl.java:307)
    	at org.springframework.webflow.execution.impl.FlowExecutionImpl.handleException(FlowExecutionImpl.java:283)
    	at org.springframework.webflow.execution.impl.FlowExecutionImpl.signalEvent(FlowExecutionImpl.java:197)
    	at org.springframework.webflow.executor.jsf.FlowNavigationHandler.handleNavigation(FlowNavigationHandler.java:144)
    ...
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE flow PUBLIC "-//SPRING//DTD WEBFLOW 1.0//EN"
    	"http://www.springframework.org/dtd/spring-webflow-1.0.dtd">
    
    <flow start-state="InitialQuestions">
    
    	<start-actions>
    		<action bean="masterWizardActions" method="initialize" />
    	</start-actions>
    
    	<view-state id="InitialQuestions"
    		view="redirect:/masterjoin/InitialQuestions.jsp">
    		<entry-actions>
    			<action bean="masterWizardActions" method="processLocation" />
    		</entry-actions>
    		<transition on="submit" to="UserInfoOrAuth">
    			<action bean="masterWizardActions"
    				method="setupRecurringOptions" />
    			<action bean="masterWizardActions"
    				method="setupSubComponent" />
    		</transition>
    	</view-state>
    
    	<decision-state id="UserInfoOrAuth">
    		<if
    			test="${flowScope.stdFamUserCreationComponent.mainUserCheckValues.userNew}"
    			then="MainUserInfo" else="MainUserAuth" />
    	</decision-state>
    
    	<view-state id="MainUserAuth"
    		view="redirect:/masterjoin/MainUserAuth.tiles">
    		<entry-actions>
    			<action bean="masterWizardActions" method="processLocation" />
    		</entry-actions>
    		<transition on="submit" to="AuthenticateMainUser">
    			<action bean="masterWizardActions"
    				method="populateFromUser" />
    		</transition>
    	</view-state>
    
    	<decision-state id="AuthenticateMainUser">
    		<if
    			test="${flowScope.stdFamUserCreationComponent.mainUserCheckValues.userAuthenticated}"
    			then="SpouseOrChoose" else="MainUserAuth" />
    	</decision-state>
    
    	<view-state id="MainUserInfo"
    		view="redirect:/masterjoin/MainUserInfo.tiles">
    		<entry-actions>
    			<action bean="masterWizardActions" method="processLocation" />
    		</entry-actions>
    		<transition on="submit" to="SpouseOrChoose">
    			<action bean="masterWizardActions"
    				method="populateFromUser" />
    		</transition>
    	</view-state>
    
    	<decision-state id="SpouseOrChoose">
    		<if
    			test="${flowScope.stdFamUserCreationComponent.createSpouseUser}"
    			then="SpouseUserInfo" else="ChooseFlow" />
    	</decision-state>
    
    	<view-state id="SpouseUserInfo"
    		view="redirect:/masterjoin/SpouseUserInfo.tiles">
    		<entry-actions>
    			<action bean="masterWizardActions" method="processLocation" />
    		</entry-actions>
    		<transition on="submit" to="ChooseFlow" />
    	</view-state>
    
    	<action-state id="ChooseFlow">
    		<action bean="masterWizardActions" method="nextFlow" />
    		<transition on="partnerFlow" to="ChurchInfo" />
    		<transition on="familyFlow" to="BillingInfo" />
    	</action-state>
    
    	<view-state id="ChurchInfo"
    		view="redirect:/masterjoin/ChurchInfo.tiles">
    		<entry-actions>
    			<action bean="masterWizardActions" method="processLocation" />
    		</entry-actions>
    		<transition on="submit" to="AdditionalUsersInfo">
    			<action bean="masterWizardActions"
    				method="churchInfoPopulated" />
    		</transition>
    	</view-state>
    
    	<view-state id="AdditionalUsersInfo"
    		view="redirect:/masterjoin/AdditionalUsersInfo.tiles">
    		<entry-actions>
    			<action bean="masterWizardActions" method="processLocation" />
    		</entry-actions>
    		<transition on="submit" to="BillingInfo" />
    	</view-state>
    
    	<view-state id="BillingInfo"
    		view="redirect:/masterjoin/BillingInfo.tiles">
    		<entry-actions>
    			<action bean="masterWizardActions" method="processLocation" />
    		</entry-actions>
    		<transition on="submit" to="ConfirmationPage">
    			<action bean="masterWizardActions"
    				method="billingInfoPopulated" />
    		</transition>
    	</view-state>
    
    	<view-state id="ConfirmationPage"
    		view="redirect:/masterjoin/ConfirmationPage.tiles">
    		<entry-actions>
    			<action bean="masterWizardActions" method="processLocation" />
    		</entry-actions>
    		<transition to="SuccessPage" />
    	</view-state>
    
    	<action-state id="CreateMembership">
    		<action bean="masterWizardActions" name="create" />
    		<transition on="success" to="SuccessPage" />
    	</action-state>
    
    	<end-state id="ErrorPage"
    		view="/masterjoin/ErrorPage.jhtml" />
    	<end-state id="SuccessPage"
    		view="/masterjoin/SuccessPage.jhtml" />
    	<end-state id="CancelPage" view="/index.jsp" />
    
    	<global-transitions>
    		<transition on="initialQuestions" to="InitialQuestions" />
    		<transition on="mainUserInfo" to="MainUserInfo" />
    		<transition on="spouseUserInfo" to="SpouseUserInfo" />
    		<transition on="billingInfo" to="BillingInfo" />
    		<transition on="churchInfo" to="ChurchInfo" />
    		<transition on="additionalUsersInfo" to="AdditionalUsersInfo" />
    		<transition on="cancel" to="CancelPage" />
    		<transition on="error" to="ErrorPage" />
    		<transition on-exception="java.lang.Exception" to="ErrorPage" />
    	</global-transitions>
    
    	<end-actions>
    		<action bean="masterWizardActions" method="cleanUp" />
    	</end-actions>
    
    </flow>

  • #2
    Well, CancelPage indeed isn't transitionable -- it's an EndState. Is an exception being thrown within that state? If so that could cause this, it's a known issue in 1.0 RC3. 1.0 RC4 corrects this, allowing transitions from end states on exceptions thrown in end states.

    Keith

    Comment


    • #3
      I don't think so

      This isn't the only flow I have, and other flows point to tiles that use the JSPs, they don't throw this message, and direct calls to those urls don't throw any exceptions.

      Maybe RC4 will fix the problem, I'll try that to make sure it fixes the problem, though I have found a workaround of changing the the end-states to view-states and moving the end-actions action, into the entry-action for those views.
      Last edited by jesfrk7; Sep 14th, 2006, 04:23 PM.

      Comment


      • #4
        Sorry to bring this old thread back up, but I am still seeing the error about untransitionable states when I get an exception in my end-state. Somehow when i get this error it is not being handled by my flow exception-handler. This occurs when I get a NullPointer exception in an entry-action to an end-state.

        java.lang.IllegalStateException: You can only signal events in transitionable states, and state [EndState@3b02469b id = 'transfer', flow = 'myflow', entryActionList = list[[AnnotatedAction@3b9c869b targetAction = myAction@5a884634, attributes = map['method' -> 'transfer']]], exceptionHandlerSet = list[[empty]], viewSelector = [ExternalRedirectSelector@3b31069b urlExpression = [CompositeStringExpression@3b31869b expressions = array<Expression>[/qt/transfer.html, flowScope.key]]], outputMapper = [null]] is not transitionable - programmer error
        at org.springframework.webflow.engine.Flow.getCurrent TransitionableState(Flow.java(Inlined Compiled Code))
        at org.springframework.webflow.engine.Flow.onEvent(Fl ow.java(Inlined Compiled Code))

        Comment


        • #5
          Anyone have advice on this? I am seeing it a lot in my prod environment and really need to get it fixed.

          Comment


          • #6
            I've created a JIRA issue to verify this:
            http://opensource.atlassian.com/proj...browse/SWF-313

            Erwin

            Comment

            Working...
            X