本文主要是介绍【Struts2笔记整理十】数据有效性与国际化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/106698780
文章目录
- 一、数据有效性
- 1、数据校验
- 2、手动编码方式
- 1)步骤
- 2)小栗子
- 3、XML 配置方式
- 1)针对 Action 中的所有方法校验
- 2)针对 Action 中的某一个方法校验
- 4、Struts2 提供的校验器
- 5、综合案例
- 6、自定义校验规则(了解)
- 1)编写一个类继承 FieldValidatorSupport 类
- 2)注册校验规则
- 二、国际化
- 1、Struts2 中的国际化
- 1)全局的国际化
- 2)Action 范围的国际化
- 3)包范围的国际化
- 4)临时的国际化
本篇博客主要给大家讲解 数据有效性 和 国际化,关于 国际化 我们可以只做了解即可,因为我们开发的系统大部分都是在国内使用,一般不会涉及到国外,所以 国际化 这一块简单了解即可。
一、数据有效性
关于 数据有效性,其实就是对数据进行校验,过滤掉不符合的数据。
1、数据校验
数据校验 可以分为 前台校验 和 后台校验,如果一个项目的 数据校验 只有 前台校验 没有 后台校验 的话是不安全的,因为 前台校验 是通过 JS 完成的,JS 可以被绕行,比如我们直接通过地址栏传参的方式就可以轻而易举的绕过 JS 了,但是我们使用 JS 校验可以很大程度上提升用户体验度。
本章主要为大家介绍如何使用 Struts2 框架进行 后台校验。
Struts2 框架中提供了两种 数据校验 的方式:
- 手动编码的方式进行校验;
- 采用配置文件的方式进行校验。
2、手动编码方式
1)步骤
- 继承
ActionSupport
类; - 重写
validate()
方法。
我们在
validate()
方法中就可以编写 数据校验 的代码了,但是validate()
方法针对 Action 中的所有方法,也就是说用户请求这个 Action 时,不管请求的是哪个方法,都会先执行validate()
方法进行 数据校验。这个时候问题来了,如果有的方法根本不需要 数据校验,执行
validate()
方法就会显得多此一举,浪费资源。我们针对这个问题也有专门的解决方案,我们可以编写一个与validate()
方法签名相同的方法。比如我们需要校验 Action 中的add()
方法,那我们就编写一个方法名为:validateAdd()
的校验方法。
2)小栗子
/*** 数据的校验:* 继承 ActionSupport 之后才会有一些功能:数据校验、国际化、设置错误信息。*/
public class LoginAction extends ActionSupport {private String username;private String password;public void setUsername(String username) {this.username = username;}public void setPassword(String password) {this.password = password;}@Overridepublic String execute() throws Exception {System.out.println(username);System.out.println(password);return NONE;}// 数据校验的方法:// 拦截器会先完成校验才会执行 execute方法@Overridepublic void validate() {// 判断用户名不能为空if (username == null || username.trim().length() == 0) {// 阻止 execute方法执行this.addFieldError("username", "用户名不能为空!");}// 判断密码不能为空if (password == null || password.trim().length() == 0) {this.addFieldError("password", "密码不能为空!");}}// 针对某一个方法的校验,只针对 execute() 方法public void validateExecute() {if (password.length() < 6 || password.length() > 12) {this.addFieldError("password", "密码需要在 6-12 位之间!");}}
}
3、XML 配置方式
我们除了 手动编码方式,还可以通过 XML 配置方式 完成 数据校验。但是 XML 配置方式 需要提供对应属性的
get()
方法才能使用。
1)针对 Action 中的所有方法校验
我们只需要在 Action 所在的包下创建一个与 Action 类名相同的 XML 文件即可。
文件名格式:
Action 类名-validation.xml
。如:
LoginAction-validation.xml
-
引入 DTD 约束
DTD 约束文件在
xwork-core-2.3.24.jar
中,名叫xwork-validator-1.0.3.dtd
的约束文件。 -
进行配置
<validators><!-- name:要校验的字段名 --><field name="username"><field-validator type="requiredstring"><message>用户名不能为空!(XML)</message></field-validator></field><field name="password"><field-validator type="requiredstring"><message>密码不能为空!(XML)</message></field-validator></field> </validators>
其中
requiredstring
是校验规则,意思是 必须的字符串类型,我们可以从com/opensymphony/xwork2/validator/validators/default.xml
中可以查看各种校验规则。
2)针对 Action 中的某一个方法校验
我们需要在 Action 所在的包下创建一个 XML 文件即可。
文件名格式:
Action 类名-Action 配置名-validation.xml
。如:
<action name="addLogin" class="com.action.demo.LoginAction" method="add" />
那么文件名应该是:
LoginAction-addLogin-validation.xml
<validators><field name="password"><field-validator type="stringlength"><param name="minLength">6</param><param name="maxLength">12</param><message>密码的长度为6~12位!(XML)</message></field-validator></field>
</validators>
4、Struts2 提供的校验器
5、综合案例
<!DOCTYPE validators PUBLIC"-//Apache Struts//XWork Validator 1.0.3//EN""http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators><!-- 校验用户名 --><field name="username"><field-validator type="requiredstring"><message>用户名不能为空!</message></field-validator></field><!-- 校验密码 --><field name="password"><field-validator type="requiredstring"><message>密码不能为空!</message></field-validator><field-validator type="stringlength"><param name="minLength">6</param><param name="maxLength">12</param><message>密码的长度为6~12位!</message></field-validator></field><!-- 校验确认密码 --><field name="repassword"><field-validator type="fieldexpression"><param name="expression"><![CDATA[(password==repassword)]]></param><message>两次密码输入不一致!</message></field-validator></field><!-- 校验年龄 --><field name="age"><field-validator type="int"><param name="min">18</param><param name="max">40</param><message>年龄输入不合法!必须是18~40岁之间的!</message></field-validator></field><!-- 校验邮箱 --><field name="email"><field-validator type="email"><message>邮箱格式不正确!</message></field-validator></field><!-- 校验电话 --><field name="phone"><field-validator type="regex"><param name="expression"><![CDATA[^18\d{9}$]]></param><message>电话不合法!</message></field-validator></field><!-- 校验生日 --><field name="birthday"><field-validator type="date"><param name="min">1974-01-01</param><param name="max">1996-01-01</param><message>生日不合法!</message></field-validator></field>
</validators>
6、自定义校验规则(了解)
除了 Struts2 给我们提供的校验规则外,我们还可以 自定义校验规则。
自定义校验规则 有两种方式,大家可以根据自己的需求进行选择:
- 若需要普通的验证程序,可以继承 ValidatorSupport 类(校验的时候不是针对一个字段的);
- 若需要字段验证程序,可以继承 FieldValidatorSupport 类(针对一个字段的校验)
1)编写一个类继承 FieldValidatorSupport 类
/*** 自定义的校验规则*/
public class MyAgeValidator extends FieldValidatorSupport {@Overridepublic void validate(Object obj) throws ValidationException {// 获得字段名称String name = this.getFieldName();// 获得字段的值Object value = this.getFieldValue(name, obj);if (value instanceof Integer) {int age = (Integer) value;if (age < 0) {this.addFieldError(name, obj);}}}
}
2)注册校验规则
-
在
src
下创建一个validators.xml
; -
引入 DTD 约束,在
xwork-core-2.3.24.jar
下的xwork-validator-config-1.0.dtd
; -
配置
validators.xml
:<validators><validator name="ages" class="com.demo.web.action2.MyAgeValidator"></validator> </validators>
-
使用校验规则:
RegisterAction-validation.xml
<validators><field name="ages"><field-validator type="age"><message>年龄不能为负数!</message></field-validator></field> </validators>
二、国际化
软件的 国际化 是指软件根据来访者的不同,可以自动切换语言进行显示。
它提供一组资源包,这组资源包要满足一定的规则:
- 资源包需要有相同的基本名称;
- 命名规则:
基本名称_语言_国家.properties
,如中国:message_zh_CN.properties
,美国:message_en_US.properties
;
1、Struts2 中的国际化
1)全局的国际化
-
提供一组资源包:放在
src
下-
message_zh_CN.properties
name=张三
-
message_en_US.properties
name=ZhangSan
-
-
需要在
struts.xml
中开启一个常量,value
写的是国际化文件的基本名称,我这里叫message
:<constant name="struts.custom.i18n.resources" value="message" />
-
在 Action 类中:
String name = this.getText("name");
-
在 JSP 中:
<s:text name="name" />
-
在数据校验配置文件中:
<validators><field name="names"><field-validator type="string"><message key="name" /></field-validator></field> </validators>
2)Action 范围的国际化
在 Action 类中使用。
在 Action 所在的包下创建一个属性文件(名字与 Action 的类名一致,如:
Action类名_语言_国家.properties
)。
3)包范围的国际化
在当前包以及当前包的子包下使用。
在某个包下创建属性文件(
包名_语言_国家.properties
)。
4)临时的国际化
在页面 JSP 中的使用。
<!-- 读包下的国际化文件 -->
<s:i18n name="com/demo/web/action"><s:text name="package" />
</s:i18n>
这篇关于【Struts2笔记整理十】数据有效性与国际化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!