@(Java)[Struts|Interceptor]

Struts2 更改校验配置文件位置

在Struts2中提供的拦截器校验ValidationInterceptor,该校验器中默认的配置文件位于Action包的位置下,需要和Action类放在一起,而提供的注解又不能针对每个方法不同的参数校验,只能使用配置文件方式来实现同一个Action不同方法实现不同的校验。这里配置文件的放置位置和违反了项目的结构,根据项目结构,需要把配置文件统一放置在资源包下。

原校验配置文件放置结构如下:

重定义配置文件路径后,项目结构如下:

:struts-validation/后面跟着Action类名,然后该目录下放置对该Action校验的配置文件

注:还是SpringMVC中有入参,可以集成JSR-303,通过注解来实现比较方便

校验配置文件重定位

通过查询了相关资料和看了部分源码,发现读取配置文件的路径已经写死了,但是Struts2提供自定义实现该类的接口以及配置,所以可以通过自定义方式实现。

DefaultActionValidatorManager,其中读取配置文件的路径部分代码如下:

private List<ValidatorConfig> buildAliasValidatorConfigs(Class aClass, String context, boolean checkFile) {
// 获取类全名,并将.替换为/,实现com/struts/Action/Action-alias-validation.xml类似的结构
String fileName = aClass.getName().replace('.', '/') + "-" + context + VALIDATION_CONFIG_SUFFIX; return loadFile(fileName, aClass, checkFile);
} private List<ValidatorConfig> buildClassValidatorConfigs(Class aClass, boolean checkFile) {
String fileName = aClass.getName().replace('.', '/') + VALIDATION_CONFIG_SUFFIX; return loadFile(fileName, aClass, checkFile);
}

由于上面两个方法是private的,所以只能将DefaultActionValidatorManager的所有代码复制过来,写一个CustomValidatorManager类,然后重写上面的两个方法。如下:

private final String VALIDATION = "struts-validation";
private String locateValidationConfig(Class<?> aClass) {
// struts-validation/Action/
return VALIDATION + File.separator + aClass.getSimpleName() + File.separator;
} private List<ValidatorConfig> buildAliasValidatorConfigs(Class aClass, String context, boolean checkFile) { String fileName = locateValidationConfig(aClass) + aClass.getSimpleName() + "-" + context + VALIDATION_CONFIG_SUFFIX; return loadFile(fileName, aClass, checkFile);
} private List<ValidatorConfig> buildClassValidatorConfigs(Class aClass, boolean checkFile) {
String fileName = locateValidationConfig(aClass) + aClass.getSimpleName().replace('.', '/') + VALIDATION_CONFIG_SUFFIX; return loadFile(fileName, aClass, checkFile);
}

然后在struts配置文件中配置自定义实现即可:

<constant name="struts.actionValidatorManager" value="com.jabnih.struts.validate.CustomValidatorManager"/>

Struts2 更改校验配置文件位置的更多相关文章

  1. Struts2更改配置文件struts.xml默认路径

    struts2配置文件默认存放路径在/WEB-INF/classes目录下,即将struts.xml放在src的目录下. 但是为了协作开发与方便管理,我们有时需要把struts.xml放到其他位置 s ...

  2. Struts2数据校验

    Struts2数据校验 1.常见数据校验方法 表单数据的校验方式: 表单中的数据必须被效验以后才能够被使用,常用的效验方式分为两种: 前台校验:也称之为客户端效验,主要是通过JS编程的方式进行表单数据 ...

  3. struts2 数据校验

    通过struts2中延续自xwork框架的validation.xml配置方式进行数据校验,因struts2 下存在三种请求参数的注入方式,固按照不同注入方式对validation.xml的配置进行总 ...

  4. Struts2输入校验(XML方式)

    本章主要介绍struts2的XML配置方式输入校验.以下将结合一个实例程序进行说明. 代码结构: 关键代码: RegistAction.javapackage com.alfred.regist.ac ...

  5. Struts2中的 配置文件

    struts2中涉及到的配置文件有: web.xml.struts.xml.struts.properties.default.properties.struts-default.xml web.xm ...

  6. 搭建spring+mybatis+struts2环境的配置文件

    1.web.xml配置 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=& ...

  7. struts2类型转换+校验

    1.action中validate()与validateXxx() 用于action执行前的校验,如果校验失败,跳到input视图, 前者校验整个Action: 后者校验该Action中的Xxx方法. ...

  8. Struts2的核心配置文件

    Struts2的详细配置: 配置的是struts2的核心配置文件:,在struts2的核心配置文件中主要有三个标签需要进行配置:package,action,result. 1. 配置package标 ...

  9. 更换nginx默认端口以及配置文件位置

    前言 近段时间在准备毕业设计的前期准备,基本确定了前后端分离的架构,于是就需要用到了nginx. 在之前nginx是放在docker上,所以没有端口更改跟配置文件配置的烦恼.但是现在是直接放在服务器上 ...

随机推荐

  1. SOA服务类项目开发模式

    开发模式 以需求用例为基,Cas e&Coding两条线并行,服务(M)&消费(VC)分离,单元.接口.功能.集成四层质量管理,自动化集成.测试.交付全程支持. 3个大阶段(需求分析阶 ...

  2. 利用Sharding-Jdbc实现分表

    你们团队使用SpringMVC+Spring+JPA框架,快速开发了一个NB的系统,上线后客户订单跟雪花一样纷沓而来. 慢慢地,你的心情开始变差,因为客户和产品的抱怨越来越频繁,抱怨的最多的一个问题就 ...

  3. iOS系列 基础篇 06 标签和按钮 (Label & Button)

    iOS系列 基础篇 06 标签和按钮 (Label & Button) 目录: 标签控件 按钮控件 小结 标签和按钮是两个常用的控件,下面咱们逐一学习. 1. 标签控件 使用Single Vi ...

  4. win10打开IL DASM步骤:

  5. ubuntu-Linux系统读取USB摄像头数据(gspca)

    将摄像头图像保存为jpg格式.摄像头需要是gspca免驱的.uvc若用uvc格式的需要在图像中插入Huffman表.否则无法正常显示. 程序代码: #include <stdio.h> # ...

  6. java中transient关键字的作用

    Java有个特点就是序列化,简单地来说就是可以将这个类存储在物理空间(当然还是以文件的形式存在),那么当你从本地还原这个文件时,你可以将它转换为它本身.这可以极大地方便网络上的一些操作,但同时,因为涉 ...

  7. BZOJ 1927: [Sdoi2010]星际竞速

    1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 2051  Solved: 1263[Submit][Stat ...

  8. python2.7高级编程 笔记一(Python中的with语句与上下文管理器学习总结)

    0.关于上下文管理器上下文管理器是可以在with语句中使用,拥有__enter__和__exit__方法的对象. with manager as var: do_something(var) 相当于以 ...

  9. [LeetCode] Flatten Nested List Iterator 压平嵌套链表迭代器

    Given a nested list of integers, implement an iterator to flatten it. Each element is either an inte ...

  10. Linux常用获取进程占用资源情况手段

    测试环境:Ubuntu14.04 1.  获取进程ID号 ps -aux | grep your_process_name 例如: xxx@xxx:~$ ps -e |grep Midlet|awk ...