【问题标题】:Struts 2 missing reset method?Struts 2 缺少重置方法?
【发布时间】:2012-11-06 06:45:44
【问题描述】:

我正在将一个项目从 struts 1.3 迁移到 struts 2.0。现在我已经阅读了网络上可用的各种资源,但在 struts 2.0 中找不到 struts 1.3 reset() 表单方法替代方案。

我的动作类扩展了ActionSupport 并实现了Modeldriven。我已经在动作类中实现了 validate 方法,并且效果很好。但是,当表单没有错误并且提交正确完成时,页面会重新加载初始值。

我预计我会收到一张空白表格。我寻找了一个reset() 表单方法,但找不到。目前,我明确地将所有表单值设置为空白。我不认为这是一个好的编程习惯。请建议如何在 struts 2.0 中实现表单 reset()。

【问题讨论】:

  • 向我们展示有问题的 JSP 和操作。

标签: forms struts2 validation reset struts1


【解决方案1】:

编辑:好的,您正在使用 Tiles(我从未使用过),那么我将尝试另一种解决方案:

如果您有一个空的 JSP 磁贴,并且在用户编译其字段并提交表单后,您希望始终清除这些字段...在操作中仅声明设置者而不声明 GETTERS 怎么样?

您只能从 JSP 设置到 Action,但不能从 JSP 中读取它们...然后您的字段在页面中将始终为空,并且始终由 Action 中的 setter 重写。


如果我知道了,你在 JSP 上,你调用 Action(或另一个动作)的方法 saveStuff(),然后你回到页面...

在这种情况下,您可以使用 RedirectAction 返回类型,它会从请求中删除所有参数,并将您的请求重定向到 Action 的 execute() 方法。

所以,而不是

<action name="myAction" class="com.blabla.myAction">
        <result name="success">/myPage.jsp</result>
</action>

只是做

<action name="myAction" class="com.blabla.myAction">
      <result name="success">/myPage.jsp</result>
      <result name="stuffSaved" type="redirectAction">
          <param name="actionName">myAction</param>
      </result>
</action>

这样您就可以重新进入初始状态(假设您没有在会话中放入任何由 JSP 读取的内容)。

【讨论】:

  • 好的,这很好,但我不能做 type="redirectAction",我正在处理瓷砖,我把 type="tiles"
  • 是的,您可以执行redirectAction,即struts2 结果类型!您的重定向将指向另一个操作,然后该操作将使用图块进行渲染。顺便说一句,我没有考虑过这种方法的价值,只是想清楚这是您在使用 apache tile 时可以轻松完成的事情。
【解决方案2】:

因为您的ActionForm 在Struts2 中属于同一个类,所以您必须实现自己的reset() 方法来清除您想要的任何数据。

【讨论】:

  • 是的,这就是我目前正在做的事情。当我成功提交到数据库时,我调用我的自定义 reset() 方法并将每个表单值显式设置为空。在我的情况下,我是否推断这是唯一可用的解决方案..??
  • @SushantGupta 出了点问题:应该根据请求创建操作;您永远不需要重置操作属性。如果您使用的是 Spring 插件,请确保您的操作是“原型”范围。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
  • 2016-03-27
  • 1970-01-01
  • 2017-06-28
  • 2014-07-29
  • 2013-08-13
相关资源
最近更新 更多