如何使用 Struts 2 验证有条件地验证字段?
How to validate field conditionally using Struts 2 Validation?
我是 Struts2 的新手,抱歉我的英语不好,因为它不是我的母语。
假设表单有 1 个多 select 框和 3 个文本字段:
多个Select框:
名称: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 个文本字段:(TextField1
、TextField2
、TextField3
)
<s:textfield name="TextField1" />
<s:textfield name="TextField2" />
<s:textfield name="TextField3" />
如果 Type1 是 selected,用户需要输入 TextField1。
如果Type2
被select编辑,用户需要输入TextField2
。
如果 Type3 是 selected,用户需要输入 TextField3。
如果 Type1,2,3 是 selected,用户需要输入所有文本字段。
依此类推。
如何有条件地验证文本字段?
我想通过使用 xml 或注释而不是在操作中编写 validate() 方法来做到这一点 class 因为当字段增长时代码对于读取和维护来说太长了。
我做了类似下面的事情,但逻辑不正确,因为它仍然需要对所有三个选项进行 selected。
@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; }
您不应使用字段验证器,因为字段验证器应用于用它注释的字段。如果您有三个字段验证器,则在验证过程中,所有这些验证器都会应用于每个字段。相反,您可以使用一个非字段验证器同时验证所有三个字段。动态设置一个必需的字段不会告诉 struts 或调整它以重新配置验证器。 None 实际上应该标记为必需,因为您可以删除每个标记。
我是 Struts2 的新手,抱歉我的英语不好,因为它不是我的母语。
假设表单有 1 个多 select 框和 3 个文本字段:
多个Select框:
名称: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 个文本字段:(TextField1
、TextField2
、TextField3
)
<s:textfield name="TextField1" />
<s:textfield name="TextField2" />
<s:textfield name="TextField3" />
如果 Type1 是 selected,用户需要输入 TextField1。
如果Type2
被select编辑,用户需要输入TextField2
。
如果 Type3 是 selected,用户需要输入 TextField3。
如果 Type1,2,3 是 selected,用户需要输入所有文本字段。 依此类推。
如何有条件地验证文本字段? 我想通过使用 xml 或注释而不是在操作中编写 validate() 方法来做到这一点 class 因为当字段增长时代码对于读取和维护来说太长了。
我做了类似下面的事情,但逻辑不正确,因为它仍然需要对所有三个选项进行 selected。
@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; }
您不应使用字段验证器,因为字段验证器应用于用它注释的字段。如果您有三个字段验证器,则在验证过程中,所有这些验证器都会应用于每个字段。相反,您可以使用一个非字段验证器同时验证所有三个字段。动态设置一个必需的字段不会告诉 struts 或调整它以重新配置验证器。 None 实际上应该标记为必需,因为您可以删除每个标记。