我是struts 2的新手,并且遇到了结构性问题。我假设我缺少明显的东西,但不确定是什么。

我有一个多页表单,其中一些表单元素是动态生成的,并且数据是从数据库和/或会话中预先填充的。该流程如下所示:


  
  动作1成功加载Form1->
  Form1张贴到Action2->
  Action2 SUCCESS加载Form2,但是Action2 INPUT重新加载Form1
  


表单1元素是动态的,因此需要数据库和/或会话调用以及一些准备来构建表单。 Action2确切不知道运行时表单元素将是什么。

我的问题是,我似乎无法避免让所有Action1在Action2的validate方法中再次执行代码。即,如果Action2验证失败,则Action2需要重新运行所有代码以构建Form1。

如果我对INPUT结果(返回Action1)执行redirectAction,则会丢失来自validate方法的所有错误消息。

我试图找出一种方法,以避免我拥有的每种动态表单都将我的所有安装代码都放在两个不同的位置。任何帮助将不胜感激。

最佳答案

将问题归结为:


  如何避免Action1和Action2都需要重复的代码


遵循DRY的主要方法是:


在单个Java文件中使用两个操作方法创建两个操作,然后从每个操作方法内(或之前)调用方法(自定义或prepare())。
使用方法(自定义或a BaseAction)创建prepare(),并在每个扩展它的Action内(或之前)调用它。
返回an INPUT result时使用RedirectAction结果,并带有PRG pattern and MessageStore Interceptor保留消息。


上面的链接是SO的答案,比起(通常是晦涩的)文档,它可能对新用户更有帮助。

08-18 09:35