struts中validation验证无效

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts中validation验证无效相关的知识,希望对你有一定的参考价值。

RT!
没有报任何错误信息,就好像根本就没写似的。
struts-config.xml

<form-bean name="userLoginForm" type="com.yourcompany.struts.validator.DynaValidatorForm.UserLoginForm" >
<form-property name="userName" type="java.lang.String" />
<form-property name="password" type="java.lang.String" />

<message-resources parameter="ApplicationResources" />
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
<set-property property="stopOnFirstError" value="true"/>
</plug-in>

validation.xml

<form name="userLoginForm">
<field property="userName"
depends="requried,minlength">
<arg0 key="label.username"/>
<arg1 name="minlength" key="$var:minlength" resource="false"/>
<var>
<var-name>minlength</var-name>
<var-value>3</var-value>
</var>
</field>
<field property="password"
depends="required,minlength">
<arg0 key="label.password"/>
<arg1 name="minlength" key="$var:minlength" resource="false"/>
<var>
<var-name>minlength</var-name>
<var-value>3</var-value>
</var>
</field>

ApplicationResources.properties

title.login = Login Page
item.submit = Submit

error.name.required=A UserName is Required
error.psw.required=A Password is Required
error.nickname.required=A Nickname is Required
label.username=userName
label.password=password
label.nickname=nickname

error.required=0 can not be null.
error.minlength=0 can not less than 1 char.
error.maxlength=0 can not be greater than 1 characters.
error.invalid=0 is invalid.

validator-rules.xml

<validator name="required"
classname="org.apache.struts.validator.FieldChecks"
method="validateRequired"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
msg="errors.required">

先谢谢各位帮忙~~如果成功解答可以加分~~希望留下QQ~~以便进一步解决
别说上网查啊~~我都查好几天了~~所有的跟我写的都一样~~可是我这还是不行!

请明白人留下QQ~~

action标签代码呢?
就这块块
<action path="/helloWord" type="action.HelloWordAction" parameter="method" name="helloForm" validate="true" input="/index.jsp">

<forward name="hello" path="/pages/hello.jsp"/>
</action>

validate="true"这个是设置验证的,如果不设置无效,默认是不做验证的.

参考资料:null

参考技术A struts-config.xml中
<form-bean
name="logonForm"
type="org.apache.struts.action.DynaActionForm">
<form-property name="userName" type="java.lang.String" />
<form-property name="password" type="java.lang.String" />
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property
property="pathnames"
value="/org/apache/struts/validator/validator-rules.xml,
/WEB-INF/validation.xml"/>
<set-property property="stopOnFirstError" value="true"/>
</plug-in>
不需要另外写validator-rules.xml
我和你说的这种是动态的标单验证,就是不用写form
如果你想用继承的方法,那么把你的UserLoginForm念上来看看
首先,你先要继承extends ValidatorForm或者Dynaextends ValidatorForm,然后实现validate方法
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)
ServletContext application=getServlet().getServletContext();
ActionErrors errors=new ActionErrors();

String validationKey=this.getValidationKey(mapping, request);

Validator validator=Resources.initValidator(validationKey, this, application, request, errors, page);
try
validatorResults=validator.validate();
catch(Exception e)
e.printStackTrace();

return errors;
参考技术B 一般都不用这个验证框架的 参考技术C <form-bean name="userLoginForm" type="com.yourcompany.struts.validator.DynaValidatorForm.UserLoginForm" >
你的Form也是这个包?com.yourcompany??
如果不是把这里改一下。type的值改成你的类路径
参考技术D DynaValidatorForm.java中的validate()方法去掉
<action validate="true">
第5个回答  2008-08-22 validation.xml 可能书写有错误,看看
<form-validation>
<formset>
<form name="">
<field>

</field>
</form>
</formset>
</form-validation>
看看这些都有没有

struts2_validate表单验证

使用代码实现 验证功能 (也就是重写ActionSupport中的validate()方法) 在validate方法中进行编写我们需要的验证功能 这里需要提几点的就是:

1.当我们需要对action中的某一个指定的方法使用validate()方法验证时我们需要自定义一个validate

2.当我们使用自定义的validate方法时,最好将重写的ActionSupport的validate方法去掉 (这是为了避免

引起冲突,因为如果action类中存在重写的validate()方法 程序会自动调用我们自定义的validate方法 之

后再调用它 这样就验证了多次,非常不利于程序的效率。而且容易出现冲突)

3.在创建自定义的validate方法时需要注意该方法的 方法名! 该方法名由 validate+对应的表单提交的

action中的 执行方法名称(首字母大写)

 

validateXXX或者validate方法在执行execute()方法之前执行,如果不能通过验证会返回struts.xml中相应action中<result name="input">xxxxxxx</result>的页面。

在validate函数中可以是指错误信息:

public void validateLogin() {
        //用户名不能为空
        System.out.println("validatelogin!");
        if("".equals(s.getUsername().trim())){
            this.addFieldError("usernameError", "用户名不能为空");
        }
        if("".equals(s.getPassword().trim())){
            this.addFieldError("passwordError", "密码不能为空");
        }else if(s.getPassword().length()<6){
            this.addFieldError("passwordError", "密码长度不少于6位");
        }
    }

在返回的页面中可以显示:

<div>
    <s:fielderror/>
</div>

 

以上是关于struts中validation验证无效的主要内容,如果未能解决你的问题,请参考以下文章

详解Struts中Validator验证框架的使用

struts2_validate表单验证

struts2 validate手动验证

struts2验证规则validation配置文件命名方式总结

Struts2系列:(21)在Struts中自定义验证规则

struts2标签s:form里的validate,我设置true或false,感觉没什么区别啊