Struts表单验证不执行验证取决于单击的按钮

时间:2010-04-23 13:12:33

标签: validation forms struts

我在struts上运行了一个j2ee Web应用程序。我正在使用验证XML进行表单验证。我有一个窗体中的多个按钮的问题。我有保存,删除和取消按钮。问题是我想要在单击删除按钮时不执行验证。我该怎么做。

2 个答案:

答案 0 :(得分:1)

没有像Struts那样使用Validation框架,但是你可以在动作表单中覆盖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);
    }

答案 1 :(得分: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>