【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使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Redis的数据过期策略和数据淘汰策略

《Redis的数据过期策略和数据淘汰策略》本文主要介绍了Redis的数据过期策略和数据淘汰策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录一、数据过期策略1、惰性删除2、定期删除二、数据淘汰策略1、数据淘汰策略概念2、8种数据淘汰策略

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

Python给Excel写入数据的四种方法小结

《Python给Excel写入数据的四种方法小结》本文主要介绍了Python给Excel写入数据的四种方法小结,包含openpyxl库、xlsxwriter库、pandas库和win32com库,具有... 目录1. 使用 openpyxl 库2. 使用 xlsxwriter 库3. 使用 pandas 库

SpringBoot定制JSON响应数据的实现

《SpringBoot定制JSON响应数据的实现》本文主要介绍了SpringBoot定制JSON响应数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录前言一、如何使用@jsonView这个注解?二、应用场景三、实战案例注解方式编程方式总结 前言

使用Python在Excel中创建和取消数据分组

《使用Python在Excel中创建和取消数据分组》Excel中的分组是一种通过添加层级结构将相邻行或列组织在一起的功能,当分组完成后,用户可以通过折叠或展开数据组来简化数据视图,这篇博客将介绍如何使... 目录引言使用工具python在Excel中创建行和列分组Python在Excel中创建嵌套分组Pyt

在Rust中要用Struct和Enum组织数据的原因解析

《在Rust中要用Struct和Enum组织数据的原因解析》在Rust中,Struct和Enum是组织数据的核心工具,Struct用于将相关字段封装为单一实体,便于管理和扩展,Enum用于明确定义所有... 目录为什么在Rust中要用Struct和Enum组织数据?一、使用struct组织数据:将相关字段绑

在Mysql环境下对数据进行增删改查的操作方法

《在Mysql环境下对数据进行增删改查的操作方法》本文介绍了在MySQL环境下对数据进行增删改查的基本操作,包括插入数据、修改数据、删除数据、数据查询(基本查询、连接查询、聚合函数查询、子查询)等,并... 目录一、插入数据:二、修改数据:三、删除数据:1、delete from 表名;2、truncate

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下

Java中注解与元数据示例详解

《Java中注解与元数据示例详解》Java注解和元数据是编程中重要的概念,用于描述程序元素的属性和用途,:本文主要介绍Java中注解与元数据的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参... 目录一、引言二、元数据的概念2.1 定义2.2 作用三、Java 注解的基础3.1 注解的定义3.2 内