日期:2014-05-18  浏览次数:20896 次

@Validations身份验证问题
@Validations(
requiredStrings = { 
@RequiredStringValidator(fieldName = "member.username", message = "用户名不允许为空!"),
@RequiredStringValidator(fieldName = "member.password", message = "密码不允许为空!")
}
)
@InputConfig(resultName = "error")
@SuppressWarnings("unchecked")

谁能帮我解释下这是什么意思?

------解决方案--------------------
struts2的注解验证知识。
参看这里
------解决方案--------------------
对于输入验证采用了Struts2 validation(注解方式)处理,这里就简要讲解一下如何使用Struts2 validation进行输入验证。

我们可以在需要验证的方法上写上以下注解:

@Validations(requiredStrings = { 
        @RequiredStringValidator(fieldName = "oldPassword", message = "旧密码不允许为空!"),
        @RequiredStringValidator(fieldName = "newPassword", message = "新密码不允许为空!")},
    stringLengthFields = {
        @StringLengthFieldValidator(fieldName = "newPassword", minLength = "4", maxLength = "20", message = "新密码长度只允许为4-20!")})

@RequiredStringValidator代表进行字符串非空验证,fildName是指需要验证的参数名称,message为验证失败后显示的信息。
其实struts2中内置了很多验证方法,稍后会将这些方法列出来。

写到这里,肯定有很多朋友会出现这样的问题:以上代码并不是只针对单个方法进行验证,而是对所有方法都进行了验证,其实我们可以对不需要验证的方法上写了@SkipValidation注解。。但这样又出现了问题,若有两个方法都需要进行验证但参数又不相同,那怎么办呢?
这样我们就需要配置struts2的validation interceptor的一个参数validateAnnotatedMethodOnly为true即可。
默认情况下struts2的配置中没有配置这个参数,所以需要我们自己重新配置一下defaultStack:

代码如下:

<interceptors>
    <interceptor-stack name="defaultParentStack">
        <interceptor-ref name="exception"/>
        <interceptor-ref name="alias"/>
        <interceptor-ref name="servletConfig"/>
        <interceptor-ref name="i18n"/>
        <interceptor-ref name="prepare"/>
        <interceptor-ref name="chain"/>
        <interceptor-ref name="debugging"/>
        <interceptor-ref name="scopedModelDriven"/>
        <interceptor-ref name="modelDriven"/>
        <interceptor-ref name="fileUpload"/>
        <interceptor-ref name="checkbox"/>
        <interceptor-ref name="multiselect"/>
        <interceptor-ref name="staticParams"/>
        <interceptor-ref name="actionMappingParams"/>
        <interceptor-ref name="params">
          <param nam