【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处理超大规模数据的4大方法详解

《Python处理超大规模数据的4大方法详解》在数据的奇妙世界里,数据量就像滚雪球一样,越变越大,从最初的GB级别的小数据堆,逐渐演变成TB级别的数据大山,所以本文我们就来看看Python处理... 目录1. Mars:数据处理界的 “变形金刚”2. Dask:分布式计算的 “指挥家”3. CuPy:GPU

使用Vue-ECharts实现数据可视化图表功能

《使用Vue-ECharts实现数据可视化图表功能》在前端开发中,经常会遇到需要展示数据可视化的需求,比如柱状图、折线图、饼图等,这类需求不仅要求我们准确地将数据呈现出来,还需要兼顾美观与交互体验,所... 目录前言为什么选择 vue-ECharts?1. 基于 ECharts,功能强大2. 更符合 Vue

Java如何根据word模板导出数据

《Java如何根据word模板导出数据》这篇文章主要为大家详细介绍了Java如何实现根据word模板导出数据,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... pom.XML文件导入依赖 <dependency> <groupId>cn.afterturn</groupId>

Python实现获取带合并单元格的表格数据

《Python实现获取带合并单元格的表格数据》由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,所以本文我们就来聊聊如何使用Python实现获取带合并单元格的表格数据吧... 由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,现将将封装成类,并通过调用list_exc

Mysql数据库中数据的操作CRUD详解

《Mysql数据库中数据的操作CRUD详解》:本文主要介绍Mysql数据库中数据的操作(CRUD),详细描述对Mysql数据库中数据的操作(CRUD),包括插入、修改、删除数据,还有查询数据,包括... 目录一、插入数据(insert)1.插入数据的语法2.注意事项二、修改数据(update)1.语法2.有

Spring Boot 常用注解整理(最全收藏版)

《SpringBoot常用注解整理(最全收藏版)》本文系统整理了常用的Spring/SpringBoot注解,按照功能分类进行介绍,每个注解都会涵盖其含义、提供来源、应用场景以及代码示例,帮助开发... 目录Spring & Spring Boot 常用注解整理一、Spring Boot 核心注解二、Spr

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

详解如何在SpringBoot控制器中处理用户数据

《详解如何在SpringBoot控制器中处理用户数据》在SpringBoot应用开发中,控制器(Controller)扮演着至关重要的角色,它负责接收用户请求、处理数据并返回响应,本文将深入浅出地讲解... 目录一、获取请求参数1.1 获取查询参数1.2 获取路径参数二、处理表单提交2.1 处理表单数据三、

Spring Validation中9个数据校验工具使用指南

《SpringValidation中9个数据校验工具使用指南》SpringValidation作为Spring生态系统的重要组成部分,提供了一套强大而灵活的数据校验机制,本文给大家介绍了Spring... 目录1. Bean Validation基础注解常用注解示例在控制器中应用2. 自定义约束验证器定义自

C#实现高性能Excel百万数据导出优化实战指南

《C#实现高性能Excel百万数据导出优化实战指南》在日常工作中,Excel数据导出是一个常见的需求,然而,当数据量较大时,性能和内存问题往往会成为限制导出效率的瓶颈,下面我们看看C#如何结合EPPl... 目录一、技术方案核心对比二、各方案选型建议三、性能对比数据四、核心代码实现1. MiniExcel