2

我需要将一个 bean 对象从 MVC 传递给 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
     }
    

中文流.xml

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

用户详情服务

   public RegistrationDetails getRegistrationDetails(RequestContext requestContext){

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

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

4

1 回答 1

0

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

于 2013-01-16T19:43:39.230 回答