Java Struts验证框架不工作

Java Struts验证框架不工作,java,validation,struts,struts-1,Java,Validation,Struts,Struts 1,我试图使用struts验证框架验证表单,但验证似乎被忽略了。我在validation.xml中设置了所有验证 我在表单的validate()方法中还有一些自定义表单验证,它们运行良好 我已经在操作映射中设置了validate=“false”,并从操作的doPerform() 我在Struts 1上 下面是一些代码: 行动内部 struts-config.xml 我是不是错过了什么?任何想法都会非常好 谢谢 Sahil您似乎混合了验证方法和验证程序框架 对于验证方法,我们不需要任何验证规则(不需要

我试图使用struts验证框架验证表单,但验证似乎被忽略了。我在validation.xml中设置了所有验证

我在表单的
validate()
方法中还有一些自定义表单验证,它们运行良好

我已经在操作映射中设置了
validate=“false”
,并从操作的
doPerform()

我在Struts 1上

下面是一些代码:

行动内部

struts-config.xml

我是不是错过了什么?任何想法都会非常好

谢谢


Sahil

您似乎混合了验证方法和验证程序框架

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

验证器框架(xmls)用于在客户端进行验证。
在jsp中,我们提供诸如
掩码
内网
浮动范围
、电子邮件验证等规则。

当表单验证失败时,您将被发送到
中指定的
输入
页面,而实际上它应该扩展


您正在扩展ValidatorForm吗?

找到了validation.xml被绕过的原因。 我在文件里放了一些评论。
部署应用程序时仔细查看服务器控制台,我发现由于上面的标记,服务器无法解析xml。

面临此问题的主要原因是,validator-rules.xml版本与当前struts版本不匹配。当我们升级当前struts版本时,可能没有修改validator-rules.xml。下面的链接对此进行了解释

在我的例子中,我使用的是struts 1.1。但是我从一些外部站点下载了validator-rules.xml,并使用了与我的struts版本不兼容的内容

因此,作为解决方案的第一步,首先找到应用程序中使用的struts.jar,打开清单文件并找出使用的struts版本。因为即使在版本1.2中,我们也可能有很多变体,我们希望找到确切的validator-rules.xml。其次,通过下载下面提到的链接中的struts获得相关的validator-rules.xml,并在应用程序中使用validator-rules.xml


嗨。。是的,我知道validation.xml用于应用客户端验证规则。但是也可以通过在表单的validate()方法中调用super.validate(映射,请求)来手动调用它。您说验证运行良好——那么,实际发生了什么?实际上,放在validate()中的验证运行良好。但是validation.xml中的那些不是。。是的,表单正在扩展ValidatorForm。@Sahil Dave:ValidatorForm的验证方法中有如下内容:
尝试{validatorResults=validator.validate();}捕获(ValidatorException e){log.error(e.getMessage(),e);}
。我在想也许你会得到一个被吞没的例外?!尝试激活日志,看看是否有什么东西弹出。此外,您还可以尝试对照检查代码,看看您的设置中是否有不同之处。
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;

}
<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>
ActionErrors errors =  super.validate(actionMapping, request);
// custom validations: running ok