2010-04-23 61 views
0

我有一个运行在struts上的j2ee web应用程序。我使用验证XML进行表单验证。我在一种形式的多个按钮有问题。我有保存,删除和取消按钮。问题是我想要点击删除按钮时不执行验证。我该怎么做呢。Struts表单验证不执行验证取决于点击按钮

回答

1

在Struts中没有使用过多的验证框架,但是您可以在操作表单中覆盖validate()方法。

org.apache.struts.validator.ValidatorForm是Validator插件的Struts入口点。 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); 
    } 
0

我也受到这种限制受挫。我通过在表单内创建一个输入按钮来创建“取消”类型的功能,并使用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>