Pankaj Patel
Pankaj Patel

Reputation: 63

Spring webflow Value of second parameter is not passed to subflow

Hi, I am using spring webflow2.4.4 with spring4.1.3. I am trying to pass values between two flows as below. sending value from flow first xml

<action-state id="submit">
        <evaluate expression="someMethod(form)" result="flowScope.saveStatus" />
        <set name="flowScope.value1" value="form.value1" />
        <set name="flowScope.value2" value="form.value2" />
        <transition on="success" to="view" />
    </action-state>

    <subflow-state id="view" subflow="flow/path/view">
        <input name="value1" value="value1" />
        <input name="value2" value="value2" />
        ...
    </subflow-state>

reeving data in flow second view xml

<input name="value1" type="string" />
    <input name="value2" type="string" />

now in view xml I am able to receive value for "value1" what I passed from first flow but getting value for 'value2' is null.

I tried switching the position in first flow as below

<action-state id="submit">
        <evaluate expression="someMethod(form)" result="flowScope.saveStatus" />
        <set name="flowScope.value2" value="form.value2" />
        <set name="flowScope.value1" value="form.value1" />
        <transition on="success" to="view" />
    </action-state>

    <subflow-state id="view" subflow="flow/path/view">
        <input name="value2" value="value2" />
        <input name="value1" value="value1" />
        ...
    </subflow-state>

Now I am able to see value of 'value2' but value for 'value1' receiving is null.

What is wrong here? see below debug logs for both example

1st trial

DEBUG SubflowState - Calling subflow 'flow/path/view' with input map['value1' -> 'ABCDF', 'value2' -> [null]]

2nd trial

DEBUG SubflowState - Calling subflow 'flow/path/view' with input map['value2' -> 'ABCDF', 'value1' -> [null]]

I want to pass both thew values to second flow but it second parameter is getting skipped somehow.

Upvotes: 0

Views: 828

Answers (2)

Pankaj Patel
Pankaj Patel

Reputation: 63

Thanks rptmat57, below code worked for me.

<action-state id="submit">
    <evaluate expression="someMethod(form)" result="flowScope.saveStatus" />
    <transition on="success" to="view" >
        <set name="flowScope.value2" value="form.value2" />
        <set name="flowScope.value1" value="form.value1" />
    </transition>
</action-state>

Upvotes: 2

rptmat57
rptmat57

Reputation: 3787

this is a very common mistake. the action state is transitioning when it gets a success and stops evaluating the rest of the commands.

you need to use <on-entry> to separate the two:

  1. the commands you want to set or evaluate (value1 & value2)
  2. the command that will be evaluated for the transition, here someMethod(form))


use this instead:

<action-state id="submit">
    <on-entry>
        <set name="flowScope.value2" value="form.value2" />
        <set name="flowScope.value1" value="form.value1" />
    </on-entry>
    <evaluate expression="someMethod(form)" result="flowScope.saveStatus" />
    <transition on="success" to="view" />
</action-state>

Upvotes: 2

Related Questions