【问题标题】:Hidden field value is lost if the Validation fails strut2如果验证失败,隐藏字段值将丢失 struts2
【发布时间】:2009-08-16 06:59:47
【问题描述】:

我正在使用 strut-2.1.6

我有一个查看页面,其中包含隐藏字段中当前查看记录的主键。如果我将此页面发布到保存记录并且任何验证都会失败。我回到同一页面,它保留了所有其他值,但丢失了隐藏字段值。现在,当尝试保存它时,请求参数中的主键值为 null。

我们将非常感谢您对此提供任何帮助。

【问题讨论】:

    标签: struts2 hidden-field


    【解决方案1】:

    您在执行验证的操作中是否同时为这个隐藏值设置了 getter 和 setter?

    如果是这样,您应该能够在其中设置断点,并确保隐藏的值既被推入您的操作中,又被拉出。

    如果您使用的是 Preparable,动作中的这个 id 是否有可能在验证方法或准备方法中被破坏?

    最初为呈现此页面而调用的操作是否与用于验证的操作相同?

    【讨论】:

    • 是的,我在 Action Class 中为该字段设置了 setter 和 getter。实际上,如果没有验证错误,我会收到隐藏字段值。只有在发生验证错误时我才丢失它。不,我没有使用 Preparable。我不知道 Prepareable 是否有效。因为我第一次获得隐藏字段中的值是通过请求参数。我不确定我是否可以访问 prapare() 中的 Request 对象。
    • 验证失败后你的getter会被调用吗?如果是,您的字段中的值是否仍然正确?
    • 验证失败后没有调用 setter。无论如何我已经解决了这个问题,只需在 prepare() 方法中捕获值。谢谢大脑。现在我有另一个问题 :) 我的 PasswordHistory Bean 中有一个日期字段 createDate,并且我的“search.jsp”上的相应日期组件是可选的 - 不需要验证。如果我提交表单,我会在控制台 ognl.MethodFailedException 上收到以下错误:对象 com.security.data.PasswordHistory@d5b561 [java.lang.NoSuchMethodException: setCreatedDate([Ljava.lang.String;) 的方法“setCreatedDate”失败]
    • 看起来它正在尝试将空字符串转换为日期,当它失败时尝试搜索相应的字符串参数方法,如果将值成功转换为日期,则调用相应的日期参数方法
    猜你喜欢
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 2020-08-03
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多