[main] ERROR org.apache.struts.action.ActionServlet - Unable to initialize Struts ActionServlet due to an unexpected exception or error thrown, so marking the servlet as unavailable. Most likely, this is due to an incorrect or missing library dependency.
java.lang.NoSuchMethodError: org.apache.commons.validator.ValidatorResources.<init>([Ljava/net/URL;)V
at org.apache.struts.validator.ValidatorPlugIn.initResources(ValidatorPlugIn.java:244)
at org.apache.struts.validator.ValidatorPlugIn.init(ValidatorPlugIn.java:164)
at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:871)
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:359)
at javax.servlet.GenericServlet.init(GenericServlet.java:211)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1029)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:862)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4013)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4357)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:823)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:807)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:595)
at org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:277)
at org.apache.catalina.core.StandardHost.install(StandardHost.java:832)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:701)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:432)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:983)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:349)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1091)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:789)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478)
at org.apache.catalina.core.StandardService.start(StandardService.java:480)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:2313)
at org.apache.catalina.startup.Catalina.start(Catalina.java:556)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)
在利用vcommons-validator-1.3.1.jar验证框架验证时,报了以上错误...
因为validator-1.3.1版本支持格式的原因。
解压vcommons-validator-1.3.1.jar之后,查看它的dtd文件,这是该版本的dtd所支持的dtd文件版本,可以看出保持了良好的兼容性。
看看它的不同版本是如何定义validation.xml(当然也可命做他名)配置文件格式的,
这是validator_1_3_0.dtd版本的dtd文件定义格式,支持msg|arg|var属性
这是validator_1_1_3.dtd版本的dtd文件定义格式,支持msg|arg|arg0|arg1|arg2|arg3|var属性
如此对比就可以看出来在不同的版本下需要以不同的格式来配置验证文件了。
现在注意了,将validator-rules.xml和validation.xml的头文件修改为validator_1_1_3.dtd版本的格式:
"http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
以便支持msg|arg|arg0|arg1|arg2|arg3|var的配置形式。
按道理来说validator新版本的dtd文件是该支持老格式的,但是显然新的dtd版本抛弃了老的定义格式。
在搞定了配置文件的配置格式之后,我们就开始配置(还是习惯于旧版本的配置格式):
在ApplicationResources_zh_CN.properties中对默认的验证提示进行重新定义:
#---------------------------------------------public---------------------------------------------------------#
#modify the deafault ERROR
errors.required {0}\u4e0d\u80fd\u4e3a\u7a7a
errors.minlength {0}\u957f\u5ea6\u5fc5\u987b<{1}
errors.maxlength {0}\u957f\u5ea6\u5fc5\u987b>{1}
errors.invalid {0}\u9519\u8bef\u7684\u683c\u5f0f
errors.byte {0}\u4e0d\u662f\u5b57\u8282\u578b
errors.short {0}\u4e0d\u662f\u77ed\u6574\u578b
errors.integer {0}\u8bf7\u8f93\u5165\u6570\u5b57
errors.long {0}\u8bf7\u8f93\u5165\u6570\u5b57
errors.float {0}\u8bf7\u8f93\u5165\u6570\u5b57
errors.double {0}\u8bf7\u8f93\u5165\u6570\u5b57
errors.date {0}\u662f\u9519\u8bef\u65e5\u671f\u683c\u5f0f
errors.range {0}\u5fc5\u987b\u4ecb\u4e8e{1}\u548c{2}\u4e4b\u95f4
errors.creditcard {0}\u662f\u9519\u8bef\u4fe1\u7528\u5361\u53f7
errors.email {0}\u9519\u8bef\u7684email\u683c\u5f0f
errors.url {0}\u9519\u8bef\u7684url\u683c\u5f0f
在ApplicationResources_zh_CN.properties中定义属性以及该属性的验证提示信息:
planWorkOrder.ptvalue
#difined msg inf
errors.planWorkOrder.ptvalue.double \u8bf7\u8f93\u5165\u6570\u5b57
在validation.xml文件中配置验证:
<form name="xxForm"><!--对应struts-config.xml中的配置文件的fromBean的name属性值-->
<!--属性 ptvalue-->
<field property="ptvalue" depends="required,maxlength,double">
<msg key="errors.planWorkOrder.ptvalue.double" name="double"/>
<arg0 name="required" key="${var:required}" resource="false"/><!-- resource="true"验证提示取自资源文件,false取自var变量 -->
<arg1 name="maxlength" key="${var:maxlength}" resource="false"/>
<var>
<var-name>required</var-name>
<var-value>值</var-value>
</var>
<var>
<var-name>maxlength</var-name>
<var-value>4</var-value>
</var>
</field>
</form>
当然struts-config.xml中引入validator验证框架和资源文件是必不可少的
<message-resources parameter="ApplicationResources" />
<!-- 引入struts.validator验证框架 -->
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
/WEB-INF/validation.xml"/>
</plug-in>
这样便可以验证成功!