如何访问流外的Spring Webflow FlowScope元素?

时间:2014-03-17 18:11:23

标签: java spring spring-webflow-2

编辑:我没有对这个问题有所了解,所以我补充一点细节。

我有一个Spring Webflow应用程序(版本2.3.2)。我需要从其中一个步骤(不在流程本身内部)的验证中访问多个FlowScope对象。你会认为这很简单,但我无法破解它。

Spring Webflow提供了一系列special EL variables,可用于访问各种范围,但只有内部流本身。在自定义的Spring验证器中,似乎没有任何方法可以实现它们:

@Component
public class MyObjectValidator {

    @Autowired
    ApplicationContext context;

    public void validateMyObject(MyObject myObject, Errors errors) {

        FlowScope flowScope = context.someMagicFunction();  //  <---- UNKNOWN  
        MyOtherObject otherObject = flowScope.get("otherObject");  

        if (incrediblyComplexValidation(myObject, otherObject) {
            errors.rejectValue("myField","validation.fail","Your object failed validation.");
        }
    }
}

正如您所看到的,在Spring Webflow Validator内部,除了您应该验证的对象之外,没有任何直接的外部链接。我需要访问flowScope中的其他对象。理想情况下,通过ApplicationContext或其他一些环境特征,必须有一种方法来获取这些其他对象。

任何人都知道答案吗?

1 个答案:

答案 0 :(得分:14)

您可以从RequestContext获取范围bean - 特定于请求的statecurrent Web应用程序上下文的上下文持有者。在验证方法中访问请求上下文是:

    import org.springframework.webflow.execution.RequestContext;
    import org.springframework.webflow.execution.RequestContextHolder;

    RequestContext requestContext = RequestContextHolder.getRequestContext();
    requestContext.getFlowScope().get("objectYouAreLookingFor");