【Struts2笔记整理十】数据有效性与国际化

2024-02-14 12:58

本文主要是介绍【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 框架中提供了两种 数据校验 的方式:

  1. 手动编码的方式进行校验;
  2. 采用配置文件的方式进行校验。

2、手动编码方式

1)步骤

  1. 继承 ActionSupport 类;
  2. 重写 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

  1. 引入 DTD 约束

    DTD 约束文件在 xwork-core-2.3.24.jar 中,名叫 xwork-validator-1.0.3.dtd 的约束文件。

  2. 进行配置

    <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 提供的校验器

10Struts2提供的校验器列表


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)注册校验规则

  1. src 下创建一个 validators.xml

  2. 引入 DTD 约束,在 xwork-core-2.3.24.jar 下的 xwork-validator-config-1.0.dtd

  3. 配置 validators.xml

    <validators><validator name="ages" class="com.demo.web.action2.MyAgeValidator"></validator>
    </validators>
    
  4. 使用校验规则:RegisterAction-validation.xml

    <validators><field name="ages"><field-validator type="age"><message>年龄不能为负数!</message></field-validator></field>
    </validators>
    


二、国际化

软件的 国际化 是指软件根据来访者的不同,可以自动切换语言进行显示。

它提供一组资源包,这组资源包要满足一定的规则:

  1. 资源包需要有相同的基本名称;
  2. 命名规则: 基本名称_语言_国家.properties,如中国:message_zh_CN.properties,美国:message_en_US.properties

1、Struts2 中的国际化

1)全局的国际化

  1. 提供一组资源包:放在 src

    • message_zh_CN.properties

      name=张三
      
    • message_en_US.properties

      name=ZhangSan
      
  2. 需要在 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笔记整理十】数据有效性与国际化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/708561

相关文章

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

Mysql中深分页的五种常用方法整理

《Mysql中深分页的五种常用方法整理》在数据量非常大的情况下,深分页查询则变得很常见,这篇文章为大家整理了5个常用的方法,文中的示例代码讲解详细,大家可以根据自己的需求进行选择... 目录方案一:延迟关联 (Deferred Join)方案二:有序唯一键分页 (Cursor-based Paginatio

SpringBoot整合jasypt实现重要数据加密

《SpringBoot整合jasypt实现重要数据加密》Jasypt是一个专注于简化Java加密操作的开源工具,:本文主要介绍详细介绍了如何使用jasypt实现重要数据加密,感兴趣的小伙伴可... 目录jasypt简介 jasypt的优点SpringBoot使用jasypt创建mapper接口配置文件加密

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解