如何使用Struts 2验证有条件地验证字段?

时间:2015-04-14 18:58:47

标签: validation jsp struts2 annotations conditional

我是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; }

1 个答案:

答案 0 :(得分:0)

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