【发布时间】:2010-04-23 13:12:32
【问题描述】:
我有一个在 struts 上运行的 j2ee Web 应用程序。我正在使用验证 XML 进行表单验证。我有一个表单中的多个按钮的问题。我有保存、删除和取消按钮。问题是我希望单击删除按钮时不执行验证。我该怎么做。
【问题讨论】:
标签: validation forms struts
我有一个在 struts 上运行的 j2ee Web 应用程序。我正在使用验证 XML 进行表单验证。我有一个表单中的多个按钮的问题。我有保存、删除和取消按钮。问题是我希望单击删除按钮时不执行验证。我该怎么做。
【问题讨论】:
标签: validation forms struts
在 Struts 中没有过多地使用 Validation 框架,但您可以通过覆盖操作表单中的 validate() 方法来做到这一点。
org.apache.struts.validator.ValidatorForm 是 Struts 进入 Validator 插件的入口点。 ValidatorForm 覆盖 ActionForm 的 validate() 方法,并将验证委托给 Validator。
如果您覆盖表单中的 validate() 方法并仅在需要时调用 ValidatorForm 中的方法,您可能会跳过对所需按钮的验证,例如:
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
if (/* check for clicked button*/) {
//skip validation and just return empty (i.e. no error)
return new ActionErrors();
}
// else, delegate to the validator framework
super.validate(mapping, request);
}
【讨论】:
我也对这个限制感到沮丧。我通过在表单内创建一个输入按钮来提出“取消”类型的功能,并使用 url 标签作为将浏览器位置设置为的操作。这样,表单上的验证只会在提交时触发,而不会为我们的特殊取消按钮触发。当两者都是submit 类型时,我无法让它跳过一个按钮或另一个按钮的验证。使用此解决方案,客户端验证也将正常工作。
<sx:form validate="true" action="someAction">
<sx:submit value="Save Changes" theme="simple"/> |
<sx:url action="umhome" id="cancel"></sx:url>
<input type="button" value="Cancel" onclick="return window.location = '<sx:property value="%{#cancel}"/>'; "/>
</sx:form>
【讨论】: