5

我目前正在使用Spring 3.1.2 (webflow version 2.3.1)并且我再次面临一个更老的问题。问题是通过 Spring webflow 创建一个新对象。所以我想做的是:

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

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

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

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

4

3 回答 3

4

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

<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>
于 2012-10-18T15:13:06.840 回答
1

您可以使用:

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

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

或者:

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

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

于 2012-10-17T13:18:08.120 回答
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>
于 2015-06-22T14:26:36.967 回答