validation除validation框架之外的struts2表单

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

      

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

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

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

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

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

更新

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