仅当用户从不同视图导航到视图时才执行某些代码

时间:2012-09-05 06:38:29

标签: java jsf el spring-webflow spring-el

我有一个使用Spring Web Flow进行导航的JSF应用程序。每次用户从另一个视图导航到帐户视图时,都应该执行一段代码。对于accounts视图,我有一个名为accountsBean的托管bean。我想过在流条目上从bean调用initView方法。它抛出一个PropertyNotFoundException,因为Spring不能识别accountsBean。

WEB-INF/flows/accounts-flow/flow.xml

<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">  

    <view-state id="accounts" view="accounts.xhtml">
        <on-entry>  
            <evaluate expression="accountsBean.initView()"></evaluate>  
        </on-entry>
    </view-state>

</flow>

EDIT1
我的应用程序的一部分管理帐户和组。用户使用菜单在应用程序的不同部分之间导航。 Spring Web Flow用于将菜单项的导航链接到某个视图。帐户视图包含数据表,一些用于CRUD操作的按钮和一个用于选择帐户类型的选择框。根据类型显示不同的帐户。数据表列是动态的。用户可以激活或停用某种类型。现在,用户必须注销才能查看帐户类型修改。我需要在不需要注销的情况下使其工作。

EDIT2 : 我已将流程定义更改为:

<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="accountsFlow" class="com.acme.accounts.AccountsFlow" /> 

    <view-state id="accounts" view="accounts.xhtml">
        <on-entry>  
            <evaluate expression="accountsFlow.initView()"></evaluate>  
        </on-entry>
    </view-state>

</flow>

AccountsFlow注释为org.springframework.stereotype.Component。在initView方法中,执行了accountsBean的一些代码。这适用于SessionScoped bean,但BalusC提出的解决方案更好。

1 个答案:

答案 0 :(得分:0)

BalusC的第一条评论是正确的,但Spring并不支持ViewScope开箱即用。您必须实现自己的自定义ViewScope并通过Spring applicationContext.xml文件声明它。网上有很多这样的例子:

http://cagataycivici.wordpress.com/2010/02/17/port-jsf-2-0s-viewscope-to-spring-3-0/