我可以在Spring MVC控制器中获取当前的Webflow状态吗?

时间:2012-08-23 16:18:07

标签: java spring spring-mvc spring-webflow-2

表面上,有点奇怪的问题!但我正在创建一个使用webflow和传统Spring MVC控制器的Web应用程序。

从其中一个Webflow视图中,http请求(ajax)从客户端发送到spring控制器。当它最初被编码时,它与webflow没有多少逻辑连接,但现在事情已经发生了变化,控制器可以真正了解请求来自哪个屏幕(视图状态)。

我的控制器方法签名如下所示:

@RequestMapping(value="/AjaxStuff", method=RequestMethod.POST)
public String ajaxStuff(@ModelAttribute("quote") QB2MotorQuote p_quote, BindingResult p_bindingResult, 
        HttpServletRequest p_req, Model p_model, DefaultMessageContext p_messages) {

我从我的一些webflow操作类中了解到,我可以从RequestContext对象获取当前状态:

public Event checkDeclines(RequestContext p_ctx) throws Exception {
    // get the current state
    StateDefinition state = p_ctx.getCurrentState();

我从来没有真正理解'voodoo':),Spring只能通过在方法签名上指定它们来自动注入参数(当然它只能注入它知道的东西吗?)。我试过简单地改变我的控制器方法的方法签名来注入RequestContext(徒劳地希望它会被注入),但事实并非如此。它抱怨RequestContext是一个接口。

那么,有没有人知道如何让我的控制器知道当前的webflow状态 - 或者通过在控制器方法签名中注入一些内容,或者我可以从某种方式从http请求中获取它(或者我可以得到的会话)来自请求)。

对此非常感谢。

1 个答案:

答案 0 :(得分:6)

在您的网络流视图中,您应该可以访问可在ajax调用中使用的变量${flowRequestContext}

您可以从中获取所需的信息${flowRequestContext.currentState}并将其添加为参数。

您不能直接注入requestContext,因为您不在Webflow环境中。如果是,您可以直接使用RequestContext.getRequestContext()。尝试从你的MVC控制器调用它,你将得到null。在流程中尝试,你会得到它。