我目前正与Spring 3.1.2 (webflow version 2.3.1)
合作,我再次面临一个老问题。问题是通过Spring webflow创建一个新对象。所以我想做的是:
<set name="myBean.foo" value="new Bar()"
我做了一些研究,发现这是不行的。现在面临同样的问题,我想知道是否有一些我不了解的问题的新设施,或者是一个首选的替代方案。在过去,我使用静态工厂。
除了Alan J Liu的回答:每次进行某个转换时(或每次输入某个视图时)都需要启动对象。
PS:springsource在这里没有完全回答我的问题。提前谢谢!
答案 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>