Struts验证框架不起作用

时间:2011-09-28 13:55:06

标签: java validation struts struts-1

我正在尝试使用struts验证框架验证表单,但验证似乎被绕过了。我在validation.xml中设置了所有验证。

我在表单的validate()方法中也有一些自定义表单验证,运行正常。

我在动作映射中设置了validate="false",并从动作的doPerform()

中明确调用了表单的验证

我在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>
  

form's validate()

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

我错过了什么吗?任何想法都会很棒。

由于

萨赫勒

4 个答案:

答案 0 :(得分:2)

似乎你混合了验证方法和验证器框架。

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

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

答案 1 :(得分:1)

如果表单验证失败,您将被发送到input标记中指定的<action>页面,因此我不知道您为何手动调用validate方法。

无论如何....我怀疑你的MultiChangeForm表单正在扩展ActionForm,实际上它应该扩展ValidatorForm

您是否正在延长ValidatorForm

答案 2 :(得分:0)

找出为什么验证validationx被绕过的原因。 我在文件中添加了一些注释。      在部署应用程序时仔细查看服务器控制台,我发现由于上面的标记,服务器无法解析xml。

答案 3 :(得分:0)

面临此问题的主要原因是,validator-rules.xml版本与当前的struts版本不匹配。当我们升级当前的struts版本时,我们可能不会修改validator-rules.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。其次,从下面提到的链接中下载struts获取相关的validator-rules.xml,并在应用程序中使用validator-rules.xml

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