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才可以访问该文件。
struts2数据校验与国际化的更多相关文章
- Struts2数据校验
Struts2数据校验 1.常见数据校验方法 表单数据的校验方式: 表单中的数据必须被效验以后才能够被使用,常用的效验方式分为两种: 前台校验:也称之为客户端效验,主要是通过JS编程的方式进行表单数据 ...
- struts2 数据校验
通过struts2中延续自xwork框架的validation.xml配置方式进行数据校验,因struts2 下存在三种请求参数的注入方式,固按照不同注入方式对validation.xml的配置进行总 ...
- 第六章、Struts2数据校验
一.三种实现方式 ① 用validate()方法实现数据校验 继承ActionSupport类,该类实现了Validateable接口,该接口中定义了一个validate()方法,在自定义的Actio ...
- 06章 Struts2数据校验
一.三种实现方式 ① 用validate()方法实现数据校验 继承ActionSupport类,该类实现了Validateable接口,该接口中定义了一个validate()方法,在自定义的Actio ...
- struts2 之 struts2数据校验
1. 数据校验一般分为2类:前端的校验(js校验),后端的校验(java代码):实际开发中大部分情况下都是采用js校验.在对数据安全要求较高的情况下可能会采用后端验证. 2. Struts2提供了后 ...
- JSR教程2——Spring MVC数据校验与国际化
SpringMVC数据校验采用JSR-303校验. • Spring4.0拥有自己独立的数据校验框架,同时支持JSR303标准的校验框架. • Spring在进行数据绑定时,可同时调用校验框架完成数据 ...
- Struts2数据校验方法
方法: 1.在Action类中execute()方法中进行校验. 优点:Action类无需继承框架中的类. 缺点:(1)当有多个校验时,代码重复,违反高内聚,低耦合. 2.重写框架ActionSupp ...
- Struts2 数据校验之四兄弟
现在是科技的时代,大多数人都在网上购物了, 我们都碰到过相同的问题,各大网站弄的那些各种各样的注册页面,相信大家都深有体会. 有了这验证就很好的保证了我们的信息的准确性和安全性. 接下来我给大家讲解一 ...
- Struts2 数据校验流程
随机推荐
- java画图程序_图片用字母画出来
最近在研究怎样将图片用字母在文本编辑工具中“画”出来. 你看了这个可能还不知道我想说什么? 我想直接上图,大家一定就知道了 第一张:小猫 原图:http://www.cnblogs.com/hongt ...
- weblogic部署项目包,报空指针错误
贴出 报错代码 <weblogic> <> <> <1479765377228> <BEA-240003> <Console enco ...
- Mockito学习资料
官网:http://mockito.org/ https://dzone.com/refcardz/mockito
- 纪念逝去的岁月——C/C++选择排序
选择排序 代码 #include <stdio.h> void printList(int iList[], int iLen) { ; ; i < iLen; i++) { pri ...
- Working with HTTP
A WebClient façade class for simple download/upload operations via HTTP or FTP WebRequest and WebRes ...
- Maching Learning 学习资料
A星(A*, A Star)算法详解 CSDN技术主题月----“深度学习”代码笔记专栏 UC Berkeley CS188 Intro to AI
- IE中的CSS3不完全兼容方案
摘要: Internet Explorer,其本身也是足够强大的.IE特有的技术可以很好的实现一些CSS3的效果. 到Internet Explorer 8为止,IE系列是不支持CSS3的.在IE中要 ...
- java 与c#比较
1.开发周期方面:c#比java开发周期更快2.java出现的时间更长.开源性广.跨平台性好3.c#较为封闭.后出于java4.c#有无符号类型.java没有5.java与c#都有值类型.但是java ...
- # 20145334赵文豪 《Java程序设计》第7周学习总结
20145334赵文豪 <Java程序设计>第7周学习总结 教材学习内容总结 第十三章 时间与日期 13.1.1时间的度量 1.格林威治时间(GMT):参考太阳到达最高点,有时间误差. 2 ...
- HashMap实现原理分析
1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端. 数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大.但数组的二分查找时间复杂度小,为O(1 ...