你好,游客 登录 注册 搜索
背景:
阅读新闻

Struts2 更改校验配置文件位置

[日期:2017-06-26] 来源:Linux社区  作者:jabnih [字体: ]

@(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"/>

推荐阅读:

Struts中异步传送XML和JSON类型的数据 http://www.linuxidc.com/Linux/2013-08/88247.htm

Struts2的入门实例 http://www.linuxidc.com/Linux/2013-05/84618.htm

Struts2学习笔记-Value Stack(值栈)和OGNL表达式  http://www.linuxidc.com/Linux/2015-07/120529.htm 

struts2文件上传(保存为BLOB格式) http://www.linuxidc.com/Linux/2014-06/102905.htm

在Struts2中使用ModelDriven action http://www.linuxidc.com/Linux/2017-03/141203.htm

Struts2拦截器浅解  http://www.linuxidc.com/Linux/2017-03/141473.htm

Struts2数据验证机制  http://www.linuxidc.com/Linux/2016-10/135995.htm

struts2简单示例 http://www.linuxidc.com/Linux/2016-11/137146.htm

Struts2绑定对象数组  http://www.linuxidc.com/Linux/2017-01/139080.htm

Struts2 s:if标签以及 #,%{},%{#}的使用方法  http://www.linuxidc.com/Linux/2016-11/137188.htm

Struts 的详细介绍请点这里
Struts 的下载地址请点这里

本文永久更新链接地址http://www.linuxidc.com/Linux/2017-06/145201.htm

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款