【问题标题】:Struts2 Select tag : required vs. requiredLabelStruts2 选择标签:required vs. requiredLabel
【发布时间】:2016-10-28 14:17:01
【问题描述】:

我正在将struts2(core)从2.1.8.1升级到2.3.31,出现以下问题:升级所有jar、编译、运行、访问页面后,出现如下错误:

java.lang.NoSuchMethodError: org/apache/struts2/views/jsp/ui/SelectTag.setRequired(Ljava/lang/String;)V

所以我稍微挖掘了一下,发现了以下报告:Source compatibility report for the struts2-core library between 2.3.8 and 2.3.12 versions
基本上表明:

  1. AbstractUITag.setRequiredLabel ( String requiredLabel ) : void - 已添加。

  2. AbstractUITag.setRequired ( String required ) : void - 已删除

现在,docs 用于 Select 元素,请提及以下内容,requiredLabel 被定义为如果设置为 true,则呈现的元素将指示需要输入布尔类型。

所以,我有点迷路了,我应该使用 requiredLabel=true 还是只删除 required 属性并在代码中验证?

【问题讨论】:

    标签: struts2 compatibility backwards-compatibility


    【解决方案1】:

    requiredLabel 属性将生成一个* 以直观地呈现该字段是必填的。

    The attribute was called required in old versions of the tags,但随后 HTML5 规范出现了 required 属性,它与星号无关,而是指示浏览器不允许提交这些字段为空的表单,因此新的标签的版本必须更改它才能使用 HTML5 版本,同时保持星号功能可用,只是在另一个名称下:requiredLabel

    您唯一需要的操作是:

    找到required="true"的每一个匹配项,将其替换为requiredLabel="true"

    建议操作是:

    找到required="true"的每一个匹配项,

    将其替换为requiredLabel="true" required="required"

    ,这样你就可以两全其美了。

    还要注意无用但可能存在的required="false" 事件。

    【讨论】:

    • 非常感谢您的解释,我现在明白了。只有一条评论 - 在 struts 2.3 中没有“必需”属性,因此设置仍然失败。
    • 不会因为dynamic attributes而失败。随意upvote :)
    【解决方案2】:

    setRequiredLabel 似乎与 setRequired 具有相同的方法签名,保存方法名称。考虑到手动编写验证代码可能需要更多时间,而且效率可能比使用 setRequiredLabel 低,因此使用 setRequiredLabel 而不是重新发明轮子可能是一个不错的选择。

    还可能值得考虑此版本对代码中可能使用 setRequired 的其他区域的影响,并尽可能保持类之间的工作一致。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 2013-03-18
      • 2012-06-29
      相关资源
      最近更新 更多