我的问题是我在此操作中有一个Action和一个List,我从数据库中搜索了一些项目
情况是:
用户进行搜索,我将此列表中的项目放入用户的网格中
到此为止
问题是当用户要求将他在网格中显示的数据打印到pdf时
当我回到Action,我的属性" listItems"是空的。
我已经在我的Action中创建了一个构造函数,我看到用户一直发出请求,我创建了一个新的动作实例,我的意思是:
部分代码:
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;或类似的东西?
当用户要求我打印时,我需要我的列表保持活跃状态。
答案 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配置浏览器的扩展,以便在运行时查看操作的对话详细信息。
学习使用时间非常短,配置时间非常短。如果文档不够有用,请告诉我,我会尽快详细说明文档并在网站上加以完善。
此外,如果有人认为该插件是一种糟糕的方法,我恳请您分享您的见解!