【问题标题】:Spring Webflow: Trouble with passing objects to a JSP form within a view-stateSpring Webflow:在视图状态中将对象传递给 JSP 表单时遇到问题
【发布时间】: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(仅&lt;form:form&gt; 标记)。我在一本书中读到,我需要在此处隐藏输入以使流程以某种方式在离开 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


    【解决方案1】:

    您需要将&lt;binder&gt; 块添加到您的&lt;view-state&gt;。这告诉 Web Flow 将特定输入字段绑定到模型对象是预期/安全的。这可以防止用户手动设置您不打算在此阶段设置的其他模型字段。

    例如

    <view-state id="two_buttons" model="funkClass">
        <binder>
            <binding property="buttonNumber"/>
        </binder>
        <transition on="wayChosen" to="decider"/>
    </view-state>
    

    【讨论】:

      猜你喜欢
      • 2010-11-05
      • 1970-01-01
      • 2014-01-09
      • 2012-09-03
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多