【问题标题】:Struts2 and multiple active wizards / workflowsStruts2 和多个活动向导/工作流
【发布时间】:2012-02-14 08:29:47
【问题描述】:

我目前正在开发一个集成了向导/工作流的 Struts2 应用程序,以产生所需的结果。为了更清楚,有一个业务对象在三个不同的页面上发生了变化(主要是通过 AJAX 调用)。目前,我正在使用 ModelDriven 操作(通过使用同一业务对象的所有操作进行扩展)以及 Scope 拦截器。虽然如果用户一次只处理一个业务对象的数据,这可以正常工作,但如果用户在多个选项卡中打开不同对象的向导(当我们想要更快地完成事情时,我们都会这样做)一切都会变得混乱,主要是因为我在会话中只存储了一个业务对象。

我已经阅读了几篇关于使用对话范围拦截器 (main article) 和关于使用范围插件 (here) 的文章。但是,这两种方法似乎都有问题:

  • 对话范围拦截器不会自动使对话过期,也不会与 Struts2 正确集成;
  • Scope 插件缺少适当的文档,最后一次构建是在 2007 年(实际上包括 Mark Menard 在定义他的 Conversation Scope Interceptor 时编写的一些想法,尽管它不使用相同的代码)。

Spring 的 WebFlow 插件目前似乎有点过于复杂,无法使用。我目前正在寻找可以在几个小时内实施的东西,但我不介意你是否可以根据需要提出一些可行的建议,即使它需要的时间比我现在想要花的时间多.

那么,经验丰富的 Struts2 开发人员,您有什么建议?我应该如何实现这个?

【问题讨论】:

  • 你的项目中是否已经为 DI 设置了弹簧?
  • @Quaternion:是的,Spring 正在管理项目中 DAO 对象的创建。

标签: struts2 workflow wizard interceptor scopes


【解决方案1】:

好吧,这不是一个完全成熟的想法。但鉴于没有其他人提供任何东西,这就是我要开始的内容。

1) 看看您是否可以将整个流程移动到一个页面中。我非常相信更少的页面是更好的方法。它根本不会降低应用程序的复杂性,但用户通常会发现界面更加直观。解决此问题的最简单方法之一是使用 json 插件和对 json 服务的大量 ajax 调用。

2) 如果您必须在页面之间进行转换(或者只是认为实现 #1 的客户端工作量太大),那么我会查看 s:token 标记。启动流程的第一个页面将使用此标签,这将在每次调用时创建一个唯一值。您将在模型对象会话中存储地图。需要通过从会话中查找模型来为操作提供模型。

#2 有几个挑战。一、如何防止会话获得过多的域对象? a) 没关系,如果会话设置为六个小时,您可以确定一夜之间他们会被清理干净。 b) 提供了一个自我管理界面,可以在会话中获取/设置/列出对象。这可能是你一开始想到的,但它会让一个工人做一定的量,然后停下来做另一个。如果工作单元有一些有意义的名称(发票编号或其他),它可能会非常有用。

更复杂一点的是将模型对象移出会话并移入服务层。在插入时,您将设置插入时间。您可能需要一个管理器来保存每种类型的模型对象,并且每个管理器都有一个守护线程,它会定期扫描域对象的映射并清除过期的对象。

您可以通过使用令牌启动流程然后在每个页面上使用另一个令牌来计算更复杂的系统。分别为“flowId”和“currentPageId”,然后您可以绘制允许的转换。

请注意,此时 spring web flow 开始看起来不错了。

【讨论】:

  • 我实际上是被内容量强迫使用多个页面。但是,它们是使用 AJAX 加载的,并且是选项卡式菜单的一部分。使用令牌的想法似乎不错,据我了解,您实际上建议实现我自己的对话范围。我反对将这些业务对象存储在会话中,因为我不想将应用程序绑定到某个应用程序服务器。我在某处读到会话对象的大小通常是有限的。存储在其他地方的地图可能是个好主意。
【解决方案2】:

现在有一个用于 Struts2 的对话插件,开发人员只需很少的工作即可实现所有这些目标:http://code.google.com/p/struts2-conversation/

它有: - 嵌套对话 - 清理死对话 - 带有注释和命名约定的配置约定 - 继承的对话 - 与 Struts2 完全集成 - 对话范围也可以被 Spring IoC 容器管理的 bean 使用

希望它对某人有所帮助。

【讨论】:

    猜你喜欢
    • 2013-04-24
    • 2014-12-21
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多