2

在我的 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 之前,我填写degreeList了action 类。我需要验证这个表格。所以我尝试了验证框架。但问题是"input",如果验证失败,动作类会自行返回。degreeList如果验证失败,我无法重新填写。所以无法加载上面的JSP。错误说degreeList不是列表/集合,因为列表不再在值堆栈中。有人请指导我如何以另一种方式验证?谢谢。

4

2 回答 2

3

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

于 2013-04-28T18:47:31.717 回答
3

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

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

如果返回“输入”,您应该能够注释您的操作(或使用 struts.xml)以重定向到适当的页面,即使这意味着在发送表单之前的页面或不太合理的页面说明“抱歉你放在错误的值中,并且由于表单的时间敏感性,我们永远无法让您选择再试一次:)”

更新

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

于 2013-04-28T18:01:30.300 回答