我正在尝试使用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
我错过了什么吗?任何想法都会很棒。
由于
萨赫勒
答案 0 :(得分:2)
似乎你混合了验证方法和验证器框架。
对于验证方法,我们不需要任何验证规则(不需要xmls)。我们只需在formBean
类中编写验证方法,我们就可以向ActionErrors
对象添加错误。
Validator框架(xmls)用于在客户端进行验证。
在jsp中,我们提供了mask
或intRange
,FloatRange
,电子邮件验证等规则。
答案 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