编程语言
首页 > 编程语言> > java-Spring Web Flow从流向控制器传递模型对象

java-Spring Web Flow从流向控制器传递模型对象

作者:互联网

Spring Web Flow中使用的模型对象传递给Controller的正确方法是什么?

我的用例如下:

我有一个流程,最终状态显示一个包含一些计算结果的模型对象.很好我在页面上也有一个链接,以生成一个pdf显示结果.如果我手动设置模型对象,那也可以正常工作.

那么,如何获得流向控制器的模型对象呢?还是有一种更清洁的方式使用Webflow查看pdf?

谢谢

解决方法:

不幸的是,这不是一个简单的方法. Webflow在其自己的存储库中的不同时间维护所有对象及其状态.因此,在e1s2处的模型对象将是与e1s3不同的物理对象,依此类推.

我能想到的最简单的方法是将对象存储在会话中,作为结束步骤的一部分.然后,您可以将用户重定向到控制器,并从会话中获取/删除对象.

另一种方法是将结果实际保存在某个持久性存储(例如数据库)中,并且链接可以具有一个ID,该ID将允许您提取信息并重新生成结果(如果可能)

编辑:
因为在会话中放置流控制对象可能会成为一个烦人的过程,可能无法使自己参与其中,但这并不是最佳解决方案,但以下是有关如何执行此操作的示例:

public class MainFlowController{
    ...rest of the flow's logic

    public void endFlow(RequestContext context){
       ModelObject obj = ...;
       HttpServletRequest req = (HttpServletRequest )context.getExternalContext().getNativeRequest();   
       req.getSession().setAttribute("endModelObject",obj );
    }
}

在这里,您要将ModelObject分配给会话,并且需要使用endModelObject将其拉回

RequestContext是一个由webflow拥有的对象,您可以传入它,将使pdf字节数组进入会话.您可以使用webflow中的action-state元素进行分配

<action-state id="setPDF">
    <evaluate expression="mainFlowController.endFlow(flowRequestContext)"/>;
    <transition to="endFlow"/>
</action-state>
<end-state id="endFlow" view="end.jsp"/>

自从它现在在会话中以来,该链接将不得不命中您想要的控制器并直接从会话中拉出.

标签:spring-webflow,spring,java,spring-mvc
来源: https://codeday.me/bug/20191102/1990386.html