验证除验证框架之外的struts2表单

时间:2013-04-28 16:31:25

标签: java jsp struts2 validationframework

在我的Struts2 JSP表单中,有文本字段和选择标记。例如,

<s:form>
<s:textfield name="name" label="Name"/>
<s:textfield name="dob" label="Date of Birth"/>
<s:select name="degree" list="degreeList" listKey="degreeID" listValue="degreeName"/>
<s:submit/>
</s:form>

在加载这个JSP之前,我在action class中填充了degreeList。 我需要验证此表单。所以我尝试了验证框架。但问题是如果验证失败,则动作类返回"input"本身。如果验证失败,我无法重新填充degreeList。所以上面的JSP无法加载。错误说degreeList不是列表/集合,因为列表不再位于值堆栈中。请有人指导我如何以其他方式验证?感谢。

2 个答案:

答案 0 :(得分:3)

没有什么能阻止你在execute()中进行验证并返回你想要的结果字符串或抛出异常。

但真正的问题似乎是“如果验证失败,我无法重新填写DegreeList”,为什么不呢,为什么不能把它们发回给同一个表格呢?

您应该能够注释您的操作(或使用struts.xml),以便在返回“input”时重定向到相应的页面,即使这意味着在发送表单之前的页面或不太合理的页面声明“抱歉,您输错了值,由于表格的时间敏感性,我们永远不会给您再次尝试的选择:)“

<强>更新

@Results({   @Result(name =“input”,location =“/ package / my-action”) })

答案 1 :(得分:3)

当您从validate()方法返回时,您需要解决的所有问题都是重新填充列表。我想你的行动扩展了ActionSupport,如果不是,那么你应该这样做。覆盖validate()方法。在那里,您应该检查hasActionErrors()hasFieldErrors()。如果有,那么重新填充列表。作为一种好的做法,您应该将用于呈现JSP的代码分开,并在validate方法中重用它。 validate() INPUT结果返回后没有执行操作。