【发布时间】:2018-01-02 23:12:44
【问题描述】:
我正在学习 Spring WebFlow,但遇到了一个奇怪的问题:
<view-state> 标签允许"model" 属性。因此,我希望在 JSP 中,我可以使用我的 Spring 表单中的属性 "modelAttribute" 接受在此模型中传递的对象(就像在“普通”Spring MVC 中我会在 Controller 类中做同样的事情一样)。
但是我看到的行为很奇怪:正在渲染 JSP,但它只调用我的对象上的 getter 方法,而不是 setter!
行为的详细描述见下文。
所以这里有一些代码: 我的流 XML:
<?xml version="1.0" encoding="UTF-8"?>
<flow xmlns="http://www.springframework.org/schema/webflow"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/webflow
http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd">
<var name="funkCLass" class="somepackage.FlowFunctions"/>
<view-state id="two_buttons" model="funkClass">
<transition on="wayChosen" to="decider"/>
</view-state>
<action-state id="decider">
<evaluate expression="funkCLass.getButtonNumber()"/>
<transition on = "1" to="way_one"/>
<transition on = "2" to="way_two"/>
</action-state>
<view-state id="way_one"/>
<view-state id="way_two"/>
</flow>
在视图状态下呈现的我的 JSP(仅<form:form> 标记)。我在一本书中读到,我需要在此处隐藏输入以使流程以某种方式在离开 JSP 后停止的地方继续 - 但对我而言,无论有无此输入,行为都是相同的。
<form:form modelAttribute="funkCLass" method="POST">
Select your way, Sir: <form:input path="buttonNumber"/>
<br/><br/>
<input type="hidden" name="_flowExecutionKey" value="${flowExecutionKey}"/>
<input type="submit" name="wayChosen" value="Submit"/>
</form:form>
FlowFunctions 类(很简单):
import java.io.Serializable;
public class FlowFunctions implements Serializable {
private int buttonNumber;
public void printMessage(){
System.out.println("Hello World OF Spring Web Flow!");
}
public int getButtonNumber() {
System.out.println("Inside getButtonNumber()");
return buttonNumber;
}
public void setButtonNumber(int buttonNumber) {
System.out.println("Inside setButtonNumber()");
this.buttonNumber = buttonNumber;
}
}
所以行为是:当我在浏览器中调用流的 URL 时,我进入视图状态并看到 JSP,这工作正常。在我输入它的那一刻,我在控制台中看到,字段 buttonNumber 的 getter 方法被调用 - 这也是预期的。但是当我在输入字段中输入一个值并单击提交时,setter 方法没有被调用!(我在 getter 和 setter 中的 println 语句中看到了这一点)。另外JSP 会立即再次渲染所以,我猜在提交时也没有发送“wayChosen”请求参数,否则应该执行到下一个状态的转换?
你能解释一下,这种行为的原因是什么,我怎样才能让它起作用?
【问题讨论】:
标签: java spring jsp spring-mvc spring-webflow