【问题标题】:How to validate field conditionally using Struts 2 Validation?如何使用 Struts 2 验证有条件地验证字段?
【发布时间】:2019-03-11 20:59:28
【问题描述】:

我是 Struts2 的新手,很抱歉我的英语不好,因为它不是我的母语。

假设表单有 1 个多选框和 3 个文本字段:

多选框: 名称:sb01,选项:[value, label][1, Type1], [2, Type2], [3, Type3]

<s:select name="sb01" multiple="multiple" list="#{1:'Type1', 2:'Type2',3:'Type3'}"></s:select>

3 个文本字段:TextField1TextField2TextField3

<s:textfield name="TextField1" />
<s:textfield name="TextField2" />
<s:textfield name="TextField3" />

如果选择Type1,用户需要输入TextField1。

如果选择Type2,用户需要输入TextField2

如果选择Type3,用户需要输入TextField3。

如果选择Type1,2,3,用户需要输入所有的文本字段。 以此类推。

如何有条件地验证文本字段? 我想通过使用 xml 或注释而不是在 action 类中编写 validate() 方法来做到这一点,因为当字段增长时,代码将太长而无法读取和维护。

我已经做了类似下面的事情,但逻辑不正确,因为它仍然需要选择所有三个选项。

@FieldExpressionValidator(expression = "sb01.contain(1)", message="")
@RequiredStringValidator(message = "please fill in Textfield1.")
public String getTextField1(){ return TextField1; }

@FieldExpressionValidator(expression = "sb01.contain(2)", message="")
@RequiredStringValidator(message = "please fill in Textfield2.")
public String getTextField2(){ return TextField2; }

@FieldExpressionValidator(expression = "sb01.contain(3)", message="")
@RequiredStringValidator(message = "please fill in Textfield3.")
public String getTextField3(){ return TextField3; }

【问题讨论】:

    标签: validation jsp struts2 annotations conditional


    【解决方案1】:

    您不应该使用字段验证器,因为字段验证器应用于带有它注释的字段。如果您有三个字段验证器,则它们都将在验证过程中应用于每个字段。相反,您可以使用一个同时验证所有三个字段的非字段验证器。动态设置一个必需的字段不会告诉 struts 或调整它以重新配置验证器。实际上,它们中的任何一个都不应该按要求标记,因为您可以删除每个标记。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-28
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      相关资源
      最近更新 更多