有人知道如何在struts 2中创建单个动作实例吗?

时间:2012-01-25 19:34:44

标签: java spring struts2

我的问题是我在此操作中有一个Action和一个List,我从数据库中搜索了一些项目 情况是:
用户进行搜索,我将此列表中的项目放入用户的网格中 到此为止 问题是当用户要求将他在网格中显示的数据打印到pdf时 当我回到Action,我的属性" listItems"是空的。
我已经在我的Action中创建了一个构造函数,我看到用户一直发出请求,我创建了一个新的动作实例,我的意思是:

  1. 当用户进入页面时,我会显示数据中找到的所有寄存器 base ...动作已创建......
  2. 当用户填写过滤器并要求新搜索时,将再次创建操作
  3. 当用户要求打印显示在网格中的数据时,动作再创建一次......
  4. 部分代码:

    public class MyAction extends AbstractMyAction<MyObject, MyFilter, MyService>{
        private List<MyObject> list;
        //getter and setter...
        //method that fill my list...
    }
    

    我需要这个属性&#34; list&#34;在我将结果发送回用户并且当用户请求其他操作时,例如要求将内容打印到此列表中,请保持其值。

    是否有一些如何制作一个&#34;会话范围&#34;或类似的东西?
    当用户要求我打印时,我需要我的列表保持活跃状态​​。

4 个答案:

答案 0 :(得分:1)

请不要这样做;虽然它有可能,但它与框架和所有测试等相反。完成了正常的“原型”范围。移出框架的规范,你自己就可以了。

this FAQ entry概述了规范方法。通常,实现Preparable接口是首选机制。属性(列表)本身可以保留在会话中(并在不再需要时删除),或者您的后备缓存机制可用于减少从DB填充列表的服务所产生的任何时间罚款。

答案 1 :(得分:0)

你用Spring标记了这个问题。如果这意味着Spring正在创建Struts2操作,那么您可以在相应的bean中使用Spring scope="session"。我认为默认值为request会导致您看到的行为。

哦,我建议小心谨慎,不要滥用它,因为它会导致过于复杂和混乱的行为。

您可以详细了解Spring plugin in the official网站或other tutorials

答案 2 :(得分:0)

Strts2 Action作为数据传输对象工作,这就是为什么每个动作类请求都会导致创建Struts2 Action的新实例,我会建议您考虑在计划时更改它改变框架的工作方式,并导致应用程序的整体不可靠行为。

此问题的一个简单解决方案是使用Session,如果使用spring,则可以使用session scope

另一个解决方案是在不同的操作调用之间保持List并使其可用。

答案 3 :(得分:0)

有很多方法可以解决这个问题,包括上面提到的一些方法。为了我自己的需要,而且因为我是一个喜欢编写代码而又讨厌不雅,过度杀戮或不断重复的锅炉板的代码迷,我创造了一个Struts2 Conversation plugin

根据应用程序的范围,学习技术和交付产品的时间等,我发现该插件对我自己的需求很有用,并且我试图使用它来非常简单地在Struts2中快速开发向导(我从我自己和同事的经历中注意到,有时是屁股的痛苦)。

Conversation Plugin本身并不是Spring或CDI插件的替代品。它不是依赖注入或控制框架的反转。它专门针对动作类中存在的模型的范围,并在视图中访问。它还具有一些独特的功能,如基于包的对话嵌套,通过命名约定进行配置,以及Struts2配置浏览器的扩展,以便在运行时查看操作的对话详细信息。

学习使用时间非常短,配置时间非常短。如果文档不够有用,请告诉我,我会尽快详细说明文档并在网站上加以完善。

此外,如果有人认为该插件是一种糟糕的方法,我恳请您分享您的见解!