Java Struts验证框架不工作
我试图使用struts验证框架验证表单,但验证似乎被忽略了。我在validation.xml中设置了所有验证 我在表单的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您似乎混合了验证方法和验证程序框架 对于验证方法,我们不需要任何验证规则(不需要
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