在Spring Webflow中创建新对象的首选替代方法

时间:2012-10-17 13:10:36

标签: java spring-webflow

我目前正与Spring 3.1.2 (webflow version 2.3.1)合作,我再次面临一个老问题。问题是通过Spring webflow创建一个新对象。所以我想做的是:

<set name="myBean.foo" value="new Bar()"

我做了一些研究,发现这是不行的。现在面临同样的问题,我想知道是否有一些我不了解的问题的新设施,或者是一个首选的替代方案。在过去,我使用静态工厂。

除了Alan J Liu的回答:每次进行某个转换时(或每次输入某个视图时)都需要启动对象。

PS:springsource在这里没有完全回答我的问题。提前谢谢!

3 个答案:

答案 0 :(得分:4)

'value'属性接受SpEL(http://static.springsource.org/spring/docs/3.0.x/reference/expressions.html),因此您可以使用'new'运算符,只需确保使用完全限定的类名。最后,默认情况下,新创建的对象在流量范围内,但您可以明确指定所需的范围,这对我有用:

<view-state id="searchScreen" view="/WEB-INF/jsp/query.view.jsp">
    <on-entry>
        <set name="flashScope.test" value="new java.util.Date()"/>
    </on-entry>
    <transition on="..." to="...">
        <evaluate expression="..."/>
    </transition>
</view-state>

答案 1 :(得分:1)

您可以使用:

<var name="object1" class="my.package.Object" />
<set name="objectHolder.object" value="object1" />

第一行将通过构造函数创建一个新对象,第二行将其设置为objectHolder类中的变量对象(通过setter)。

OR:

<set name="objectHolder.object" value="objectFactory.createObject()" />

其中:     public Object createObject {return new Object()}

答案 2 :(得分:0)

我建议为对象创建Java工厂。虽然您可以创建一个对象,如:

<on-entry>
        <set name="flashScope.test" value="new java.util.Date()"/>
</on-entry>
如果您使用对象,则存在重构问题。如果移动/重命名对象,则XML将被破坏。而是创建一个像:

这样的工厂
@Component("webflowBeanFactory")
public class WebflowBeanFactory {    
    public static YourObject yourObjectBean(Object argument) {
        return new YourObject(argument);
    }
}

然后从webflow调用它:

<on-entry>
        <set name="flashScope.yourObject" value="webflowBeanFactory.yourObjectBean(anyVariable)"/>
</on-entry>