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