2011-09-28 73 views
1

我试图验证使用struts验证框架的表单,但验证似乎被绕过。我在validation.xml中设置了所有验证。Struts验证框架不起作用

我也有一些自定义表单验证在窗体的validate()方法运行良好。

我已经设置在动作映射validate="false"和行动的doPerform()

显式调用形式的validate我对Struts的1

下面是一些代码:

里面的动作

if(validationPassed(changeForm, mapping, request)){ 
if(!(changeForm.getResultAction().equals("add"))) 
    if(!businessValidationsPassed(changeForm, request)) 
    errorFlag = true; 
    } 
    else{ 
     errorFlag = true; 
    } 

private boolean validationPassed(MultiChangeForm form, ActionMapping mapping, HttpServletRequest request) { 

    ActionErrors errors = form.validate(mapping, request); 
    if (!errors.isEmpty()) { 
     saveErrors(request, errors); 
     return false; 
    } 
    else 
     return true; 

} 

struts-config.xml中

<action path="/multiController" 
      type="com.multi.action.MultiControllerAction" 
      name="MultiChangeForm" 
      scope="session" 
      input="multiUpdateResult.def" 
      validate="false"> 
    <forward name="success" path="/forward/initProcess/cam/multiUpdateResultDef.do"/> 
     <forward name="failure" path="/forward/initProcess/cam/multiUpdateResultDef.do"/> 
     <forward name="error" path="/forward/initProcess/cam/errorDef.do"/> 

</action> 

<plug-in className="org.apache.struts.validator.ValidatorPlugIn"> 
    <set-property property="pathnames" 
        value="/WEB-INF/multi/validator-rules.xml,/WEB-INF/multi/validation.xml"/> 
</plug-in> 

形式的validate()

ActionErrors errors = super.validate(actionMapping, request); 
// custom validations: running ok 

我缺少的东西在这里?任何想法都会非常棒。

感谢

萨赫勒

+0

你说的验证都运行良好 - 什么,然后,究竟发生了什么? –

+0

其实在验证()中的验证运行良好。但是validation.xml中的那些不是。 –

回答

1

当表单验证失败时,你被送到在<action>标签中指定的input页面,所以我不知道你为什么手动调用验证方法。

反正....我怀疑是你的MultiChangeForm表格扩展ActionForm,实际上它应该延伸ValidatorForm

是否延长ValidatorForm

+0

嗨..是的,表单正在扩展ValidatorForm。 –

+0

@Sahil Dave:'ValidatorForm'在它的验证方法中有这样的东西:'try {validatorResults = validator.validate(); } catch(ValidatorException e){log.error(e.getMessage(),e); }'。我在想,也许你会得到一个被吞噬的异常?!尝试激活日志,看看是否有东西弹出。此外,您可以尝试查看您的代码反对[验证指南(http://struts.apache.org/1.2.4/userGuide/dev_validator.html),看看如果事情是在你的设置不同。 – 2011-09-29 20:53:30

2

看来你混验证方法和验证框架。

对于验证方法,我们不需要任何验证规则(不需要xml)。我们可以在formBean类中编写验证方法,我们可以将错误添加到ActionErrors对象中。

验证框架(xmls)用于在客户端进行验证。 在JSP中,我们提供像maskintRangeFloatRange,电子邮件验证规则..

+0

嗨..是的,我知道validation.xml用于应用客户端验证规则。但是也可以通过在窗体的validate()方法中调用super.validate(mapping,request)来手动调用它。 –

0

找到了为什么validation.xml被绕过。 我在文件里面放了一些注释。 在部署应用程序时仔细观察服务器控制台,发现由于上述标记,服务器无法解析xml。

0

面临此问题的主要原因是,validator-rules.xml版本与当前struts版本不匹配。当我们升级当前的struts版本时,我们可能已经离开了验证器规则。xml未修改。以下链接解释相同。

http://comments.gmane.org/gmane.comp.jakarta.struts.user/137543

在我的情况,我用struts 1.1。但是我已经从某个外部网站下载了validator-rules.xml文件,并使用了与我的struts版本不兼容的文件。

因此,作为溶液的步骤首先,查找你的应用程序中使用的struts.jar并打开清单文件,并找出使用Struts的版本。因为即使在1.2版本中,我们可能有很多变体,我们希望找到确切的validator-rules.xml。其次,从在下面提到的链接下载支柱获得相关验证 - rules.xml中,并使用验证-rules.xml中的应用程序

http://archive.apache.org/dist/struts/