2013-01-01 66 views
2

我需要将一个bean对象从MVC传递到webFlow。目前,我是这样实现的:从MVC传递bean对象到Spring WebFlow

  1. 将我的bean对象作为请求属性存储在控制器中。
  2. 转发流。
  3. 从flowRequestContext开始访问对象,并将其设置在flowScope中。

    @RequestMapping(value = "/ProcessUser", method=RequestMethod.POST) 
    public String processForm(LoginUser loginUser, HttpServletRequest request){ 
    .... 
    request.setAttribute("registrationDetails", registrationDetails); 
    
    return "forward:/chineseFlow"; //Call to flow 
    } 
    

chineseFlow.xml

<on-start>   
    <evaluate expression="userDetailsService.getRegistrationDetails(flowRequestContext)" result="flowScope.registrationDetails"/> 
    </on-start> 

的UserDetailsS​​ervice

public RegistrationDetails getRegistrationDetails(RequestContext requestContext){ 

    HttpServletRequest httpRequest = (HttpServletRequest) requestContext.getExternalContext().getNativeRequest(); 
    RegistrationDetails registrationDetails = (RegistrationDetails)httpRequest.getAttribute("registrationDetails"); 
    return registrationDetails; 
} 

我不想传递多个请求参数输入到我的流程。这是将bean传递给SWF的正确方式,还是有其他更好的方法来实现它吗?

回答

0

没有太多选择。正确的方法是重新设计您的应用程序,以便整个过程在同一个流程中进行,然后您可以将流量值中的值存储到一开始。唯一的选择是要么属性(你已经在做),要么是会话范围的bean/session属性。除了这些请求属性之外,否则您最终会污染您的会话范围,并引入潜在的错误,这些错误源自会话范围中的剩余值。

+0

谢谢。我没有选择重新设计我的应用程序,以便整个过程在同一个流程中进行。我认为剩下的唯一选择就是处理它,就像使用request属性一样处理它。 – Shinky

相关问题