• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
﹏℡幸福?
博客园    首页    新随笔    联系   管理    订阅  订阅

struts2数据校验与国际化

数据校验:

Action里的validate()方法能校验action类所有的方法,如果有错,如:addFieldError,会自动返回到workflow校验拦截器不向下继续进行,不用return input(如果在别的action校验的话,需要手动return input)。如果我们只希望校验其中一个方法的话,把validate()方法改为validate+方法名(“首字母大写”);就只校验其中一个的方法。

我的Action:

package cn.jnit.action;

 

import org.apache.commons.lang.StringUtils;

 

import cn.jnit.bean.User;

 

import com.opensymphony.xwork2.ActionSupport;

 

public class RegisterAction extends ActionSupport {

private static final long serialVersionUID = 1L;

private User user;

 

 

 

public String login() throws Exception {

return SUCCESS;

}

public String login1() throws Exception {

return SUCCESS;

}

@Override

public void validate() {

if(StringUtils.isEmpty(user.getName()))

addFieldError("user.name", "用户名不能为空");

if(StringUtils.isEmpty(user.getPwd()))

addFieldError("user.pwd", "密码不能为空");

}

 

 

public User getUser() {

return user;

}

public void setUser(User user) {

this.user = user;

}

}

 

Strut2验证框架:

验证文件的编写:

在action包下,创建一个action类名-validation.xml的文件,如我的

RegisterAction-validation.xml:

<?xml version="1.0" encoding="UTF-8"?>

  <!DOCTYPE validators PUBLIC

   "-//OpenSymphony Group//XWork Validator 1.0.3//EN"

   "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">

 

<validators>

  <field name="user.name">

    <field-validator type="requiredstring">

     <message>用户名不能为空</message>

    </field-validator>

    <field-validator type="stringlength">

     <param name="minLength">5</param>

     <param name="maxLength">10</param>

     <message>用户名长度在5--10位之间</message>

    </field-validator>

  </field>

</validators>

其中验证类型,<field-validator type="">其中的type有很多类型,可以在

xwork-core-2.2.1.jar→com.opensymphony.xwork2→validator→validators→default.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">

 

<!-- START SNIPPET: validators-default -->

<validators>

    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>

    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>

    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>

    <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>

    <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>

    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>

    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>

    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>

    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>

    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>

    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>

    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>

    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>

    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>

    <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>

    <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>

</validators>

<!--  END SNIPPET: validators-default -->

可以选择。

如果只想验证其中一个方法,那么可以在action下创建:ActionName-struts2.xml里的action标签 name属性值-validation.xml,如我的

RegisterAction-userreg-validation.xml,

实现国际化:

国际化(Internationalization:I18N):

常用的ISO-639语言代码有zh(汉语)、en(英语)、fr(法语)、de(德语)均由两个小写字母组成

常用的ISO-3166标准的国家和地区码有CN(中国大陆)、US(美国)、GB(英国)、TW(台湾)、HK(香港)等,均由两个大写字母组成。

全局变量的国际化:

首先要在Struts.xml里加入:

<constant name="struts.custom.i18n.resources" value="message"></constant>

在src下创建:

Message_language_country.properties,

如我的:

message_en_US.properties里的值:welcome=welcome to China;

message_zh_CN.properties里的值:welcome=欢迎来到中国;

然后在JSP页面里:

<s:text name="getText('welcome')"></s:text>就可以输出,可以根据浏览器语言的配置来配置自己的国际化properties。

 

Action范围的国际化:那么需要在Action类下面创建:

Action类名_language_country.properties,

如我的:

我的RegisterAction_en_US.properties值为:

user.name=name

user.pwd=pwd

user.age=age

我的RegisterAction_zh_CN.properties值为:

user.name=用户名

user.pwd=密码

user.age=年龄

这里面的user是和我RegisterAction类里的User属性相对应的,

然后我的上传表单为:

  <body>

    <s:form action="register"  method="post">

      <s:textfield name="user.name" label="%{getText('user.name')}"></s:textfield>

      <s:password name="user.pwd" label="%{getText('user.pwd')}"></s:password>

      <s:textfield name="user.age" label="%{getText('user.age')}"></s:textfield>

      <s:submit value="登录"></s:submit>

    </s:form>

  </body>

上传表单的label名就会根据自己浏览器使用的语言查找对应的语言properties来显示不同的语言,另外这个表单只有在经过Action跳转到表单页面的时候才会显示出数据,因为properties现在是Action范围的文件,没有经过Action跳转到表单JSP就不会显示对应的label数据。

资源文件范围还有包范围资源文件,明明方法是在对应包下添加package_language_country.properties资源文件,其中package为固定写法,只有处于该包及子包下的Action才可以访问该文件。

 

posted @ 2014-12-05 15:23  ﹏℡幸福?  阅读(270)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3