gpt4 book ai didi

java - Spring Web Flow 将模型对象从流传递到 Controller

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:25:03 25 4
gpt4 key购买 nike

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

我的用例如下:

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

那么如何获取到 Controller 的流程中使用的模型对象呢?或者是否有更简洁的方式使用 webflow 查看 pdf?

谢谢

最佳答案

不幸的是,没有一种简单的方法可以做到这一点。 Webflow 在其自己的存储库中维护所有对象及其在不同时间的状态。因此,位于 e1s2 的模型对象将是与 e1s3 等不同的物理对象。

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

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

编辑:因为在 session 中放置流控制对象可能会成为一个烦人的过程,让自己参与其中可能不是最好的解决方案,但这里有一个如何做到这一点的例子:

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 分配给 session ,并且需要使用 endModelObject 将其拉回

RequestContext 是一个 webflow 拥有的对象,您可以传入此对象,将 pdf 字节数组放入 session 中。您可以使用 webflow 中的 action-state 元素分配它

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

因为它现在在 session 中,所以链接必须点击您想要的 Controller 并直接从 session 中拉出。

关于java - Spring Web Flow 将模型对象从流传递到 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7082421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com