Validation 为什么struts验证不适合我?
我试图使用Struts验证来检查用户输入的各种字段。如果有人能帮我看到我所缺少的,我将不胜感激。以下是我所拥有的: 我把Validation 为什么struts验证不适合我?,validation,struts2,struts-validation,Validation,Struts2,Struts Validation,我试图使用Struts验证来检查用户输入的各种字段。如果有人能帮我看到我所缺少的,我将不胜感激。以下是我所拥有的: 我把validation.xml和TestAction validation.xml放在WEB-INF/classes/ 下面是validation.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Va
validation.xml
和TestAction validation.xml
放在WEB-INF/classes/
下面是validation.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator Config 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<validators>
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
. . .
</validators>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="testInt">
<field-validator type="int">
<param name="min">0</param>
<param name="max">9</param>
<message>Number not in range</message>
</field-validator>
</field>
<field name="testString">
<field-validator type="stringlength">
<param name="minLength">4</param>
<message>String not long enough.</message>
</field-validator>
</field>
</validators>
我的struts.xml
扩展了struts default
,我有一个非常简单的操作类TestAction
,它扩展了ActionSupport
,并有字段testInt
和testString
从我所读到的内容来看,这应该足以让Struts检查输入的值,但事实并非如此。我错过了什么?我的头顶上可能有几样东西 1) 是否使用默认侦听器堆栈-此堆栈具有验证工作所需的验证侦听器,否则必须在堆栈中手动指定验证侦听器 2) TestAction-validation.xml应该在WEB-INF/classes/[package]下,因此如果操作是com.foo.TestAction,那么TestAction-validation.xml应该在WEB-INF/classes/com/foo/TestAction-validation.xml下 3) 尝试在TestAction类中以验证器xml文件的名称使用要提交到的方法的名称。您可以使用TestAction-[method\u to\u be\u validation]-validation.xml
希望有帮助 您有两种选择,基于每个模型或每个操作进行验证。要在操作级别进行验证,只需创建一个名为{your Action}-validation.xml的文件,并将其放置在与操作类相同的包中。要在模型级别进行验证,您需要创建一个类似的文件,该文件采用模型对象的名称,然后根据模型验证文件中的规则指示操作验证文件进行验证。() 将validation.xml放在java源文件(默认包)的根目录中,并将TestAction-validation.xml放在TestAction.java文件所在的同一目录中。大多数IDE都会自动将所有资源复制到生成类文件的相应目录中 更新:
可能是因为dtd的定义 已经不存在了 在struts2启动时,我遇到了这个异常,我的验证拦截器不再工作
Line: 1436 - sun/net/www/protocol/http/HttpURLConnection.java:1436:-1
at com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:115)
at com.opensymphony.xwork2.validator.DefaultValidatorFileParser.parseValidatorDefinitions(DefaultValidatorFileParser.java:118)
at com.opensymphony.xwork2.validator.DefaultValidatorFactory.retrieveValidatorConfiguration(DefaultValidatorFactory.java:195)
at com.opensymphony.xwork2.validator.DefaultValidatorFactory.parseValidators(DefaultValidatorFactory.java:184)
at com.opensymphony.xwork2.validator.DefaultValidatorFactory.<init>(DefaultValidatorFactory.java:55)
Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: http://opensymphony.com/xwork/xwork-validator-config-1.0.dtd
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436)
at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source)
at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown Source)
at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown Source)
at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
Line:1436-sun/net/www/protocol/http/HttpURLConnection.java:1436:-1
位于com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:115)
位于com.opensymphony.xwork2.validator.DefaultValidatorFileParser.parseValidatorDefinitions(DefaultValidatorFileParser.java:118)
位于com.opensymphony.xwork2.validator.DefaultValidatorFactory.retrieveValidatorConfiguration(DefaultValidatorFactory.java:195)
位于com.opensymphony.xwork2.validator.DefaultValidatorFactory.parseValidators(DefaultValidatorFactory.java:184)
位于com.opensymphony.xwork2.validator.DefaultValidatorFactory。(DefaultValidatorFactory.java:55)
原因:java.io.IOException:服务器返回了URL的HTTP响应代码:403:http://opensymphony.com/xwork/xwork-validator-config-1.0.dtd
位于sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436)
位于org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(未知源)
位于org.apache.xerces.impl.XMLEntityManager.startenty(未知来源)
位于org.apache.xerces.impl.XMLEntityManager.startdentity(未知源)
位于org.apache.xerces.impl.xmldtddscannerimpl.setInputSource(未知源)
在org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(未知来源)
位于org.apache.xerces.impl.XMLDocumentFragmentScanneImpl.ScandDocument(未知来源)
位于org.apache.xerces.parsers.XML11Configuration.parse(未知源)
位于org.apache.xerces.parsers.XML11Configuration.parse(未知源)
位于org.apache.xerces.parsers.XMLParser.parse(未知源)
位于org.apache.xerces.parsers.AbstractSAXParser.parse(未知源)
更换
“
”
使用新的DTD
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
这就是解决方案,它会起作用。您可以发布您的操作映射/struts.xml吗?如果不是的话,打开开发模式(struts.devMode),可能会给您提供更多关于发生了什么的线索。非常感谢。我还缺少一件事,那就是在我的JSP中包含像
这样的标记。接受答案提供的至少一个链接包含您应该用于验证元数据文件的新DOCTYPE:
好,但我不想检查。我在四年前就遇到了这个问题,我不再那么多地使用Struts了。为我工作!谢谢