具有范围模型驱动的 Struts2 向导
我是 Struts2 的新手,正在想出一种巧妙的方法来实现具有 2 个表单和 4 个 bean 的 3 页向导。
在开始提问之前,为了保持简单,让我以通用方式提出我的用例,不涉及任何涉及实体的细节。以下是我的用例:
- JSP1 有带有输入字段的 Form1。
- Form1 提交给 Action1。
- Form1的字段值通过请求参数绑定填充到Action1中的Bean1中。
- Action1 验证 Bean1 中的字段,如果验证失败,则显示 JSP1,其中包含 Form1 字段中捕获的 Bean1 值和错误消息。
- 如果验证成功,则使用 Bean1 检索 Bean2,并将结果定向到 JSP2。
- JSP2 显示 Bean2 中的数据以及 Form2 中的其他输入字段。
- Form2提交给Action2
- Form2的字段值通过请求参数绑定填充到Action2中的Bean3中。
- Action2 验证 Bean3 中的字段,如果验证失败,则会显示 JSP2,其中包含 Form2 字段中捕获的 Bean3 值、错误消息以及 Bean2 数据!
- 如果验证成功,则使用 Bean3 填充 Bean4,并将结果定向到 JSP3。
- JSP3 在 Bean4 中显示数据
在写这篇文章之前,我在书籍中读到过有关此主题的内容:Struts2 in Action 和 Practical Struts2 Web2.0 项目。我探索了范围拦截器、范围模型驱动操作和使用通配符的方法调用的单一操作的选项。我不希望以 Spring WebFlow 等形式添加额外的依赖项。
我正在尝试使用具有会话范围的 ScopedModelDriven 操作来实现向导。我的设计目标是为每个操作提供明确定义的 bean,而不是为所有操作使用单个 bean。
在提出有关向导的问题之前,我有一个有关操作中 bean 范围的基本问题。 Action1 应该在值堆栈中包含 Bean1,原因有两个: 1. 在提交时绑定来自 Form1 的输入值; 2. 如果验证失败,则显示 Form1 值。 Action1 还应该在值堆栈中包含 Bean2,以便在 JSP2 中显示结果。
对于输入页面 (Bean1) 和结果页面 (Bean2),操作是否应该始终具有字段(以便它们位于 ValueStack 中)?如果实现 ScopedModelDriven 哪个 bean 将是我的模型?
同样,对于 Action2,Bean2、Bean3 和 Bean4 需要位于 ValueStack 中。
一种强力解决方案是组合 Bean1、Bean2、Bean3 和 Bean4 中的所有字段,并且整个向导只有一个 Bean!我不想这样做,因为所有这些 bean 都有特定的功能。
我相信我没有正确理解这个概念。应该有一种巧妙的方法来使用会话范围使用这些原子 bean 来实现此向导。
非常感谢任何帮助。
I am new to Struts2 and figuring out a sleek way to implement a 3 page wizard with 2 forms and 4 beans.
Before starting with questions, let me put forth my use case in a generic way without any details of entities involved, to keep it simple. Following is my use case:
- JSP1 has Form1 with input fields.
- Form1 submits to Action1.
- Form1's field values are populated to Bean1 in Action1 via request parameter binding.
- Action1 validates fields in Bean1 and if validation fails displays JSP1 with captured Bean1 values in Form1 fields and error messages.
- If validation succeeds, Bean1 is used for retrieving Bean2 and result is directed to JSP2.
- JSP2 displays the data in Bean2 and also other input fields in Form2.
- Form2 submits to Action2
- Form2's field values are populated to Bean3 in Action2 via request parameter binding.
- Action2 validates fields in Bean3 and if validation fails displays JSP2 with captured Bean3 values in Form2 fields and error messages and also Beans2 data!
- If validation succeeds, Bean3 is used to populate Bean4 and result is directed to JSP3.
- JSP3 displays data in Bean4
Prior to this post I've read about this topic in books: Struts2 in Action and Practical Struts2 Web2.0 projects. I explored options of scope interceptor, scoped model driven actions and single action with Method Invocation using wildcards. I am not looking forward to add additional dependencies in the form of Spring WebFlow etc.
I am trying to implement the wizard using ScopedModelDriven actions with session scope. My design goal is to have well defined beans per action rather than having single bean for all actions.
Prior to questions regarding wizard, I have a basic question regarding bean scope in an action. Action1 should have Bean1 in the value stack for 2 reasons: 1. binding input values from Form1 on submit; 2. displays Form1 values if validation fails. Action1 should also have Bean2 in the value stack for displaying results in JSP2.
Should action always have fields (so that they are in ValueStack) for both the input page (Bean1) and result page(Bean2)? If implementing ScopedModelDriven which bean would be my Model?
Similarly, for Action2, Bean2, Bean3 and Bean4 needs to be in the ValueStack.
One brute force solution is to combine all fields in Bean1, Bean2, Bean3 and Bean4 and have just one Bean for the whole wizard! I don't want to do that because all these beans have a specific functionality.
I believe I am not getting the concept right. There should be a sleek way to implement this wizard with these atomic beans using the session scope.
Any help is much appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
可能为时已晚,但您可以通过 Struts2 Conversation 插件 轻松实现您的目标
Probably too late, but you could achieve your goals rather simply with the Struts2 Conversation plugin