一、自定义类型转换器
1、编写一个类,继承com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter
2、覆盖掉其中的public Object convertValue(Map<String, Object> context, Object value,Class toType)
context:OGNL表达式的上下文
value:实际的值。用户输入的都是字符串,但他是一个String数组。
toType:目标类型
public class DateConvertor extends DefaultTypeConverter {
/*
context:ognl表达式的上下文
value:用户输入的值( 保存数据时)或者模型中的属性。用户输入的值是String数组
toType:目标类型
*/
@Override
public Object convertValue(Map<String, Object> context, Object value,
Class toType) {
DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
if(toType==Date.class){
//2013/05/31----->java.util.Date 保存数据时
String strValue = ((String[])value)[0];
try {
return df.parse(strValue);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}else{
//java.util.Date----->2013/05/31 获取数据时
Date dValue = (Date)value;
return df.format(dValue);
}
}
}
3、注册类型转换器
3.1局部类型转换器:只对当前的Action有效
具体做法:在动作类相同的包中,建立一个名称是“动作类名-conversion.properties”的配置文件,
文件中增加以下内容:要验证的字段=验证器的类全名
birthday=cn.itcast.convertor.DateConvertor
3.2全局类型转换器:对所有的Action都有效
具体做法:在WEB-INF/classes目录下,建立一个名称为"xwork-conversion.properties"的配置文件,
文件中增加以下内容:目标类型全名=验证器的类全名
java.util.Date=cn.itcast.convertor.DateConvertor
注意:如果转换失败,Struts2框架会寻找name=input的结果页面
二、自定义拦截器
1、编写一个类,实现com.opensymphony.xwork2.interceptor.Interceptor
2、主要实现public String intercept(ActionInvocation invocation) throws Exception{}方法
该方法的返回值就相当于动作的返回值
如果调用了String result = invocation.invoke();得到了动作类的返回的值。
public String intercept(ActionInvocation invocation) throws Exception {
//判断用户是否登录
HttpSession session = ServletActionContext.getRequest().getSession();
Object obj = session.getAttribute("user");
if(obj==null){
return "login";
}else{
return invocation.invoke();//调用动作方法
}
}
3、拦截器定义好后,一定要在配置文件中进行注册:
<interceptors> 只是定义拦截器,并没有起作用 
<interceptor name="permissionInterceptor" class="cn.itcast.interceptor.PermissionInterceptor">        </interceptor>
</interceptors>
4、配置文件中的动作,要通过
<interceptor-ref name="permissionInterceptor"></interceptor-ref>使用该拦截器
注意:一旦动作中使用了自定义的拦截器,那么默认的就不起作用了。一般应该采用如下的做法:
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="permissionInterceptor"></interceptor-ref>
多个动作类都要使用的话,可以通过package来进行组合。
三、用户输入数据的验证
1、手工编程验证,针对该动作类中的所有的动作方法
步骤:
a、动作类继承ActionSupport
b、覆盖调用public void validate()方法
c、在validate方法中,编写不符合要求的代码判断,并调用父类的addFieldError(String fieldName,String errorMessage)
如果fieldError(存放错误信息的Map)有任何的元素,就是验证不通过,动作方法不会执行。
Struts2框架会返回到name=input的result
d、在name=input指定的页面上使用struts2的标签显示错误信息。<s:fielderror/>
实例演示代码:
public class UserAction extends ActionSupport implements Serializable { private String username;//用户名不能为空,还要去掉首尾空格 private String password;//3~6位的数字 public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String add(){ System.out.println("执行了user的add方法"); return SUCCESS; } public String update(){ System.out.println("执行了user的update方法"); return SUCCESS; } @Override public void validate() {//验证方法。只考虑不符合条件的 if(username==null||"".equals(username.trim())){ addFieldError("username", "用户名不能为空"); } if(password==null||!password.matches("\\d{3,6}")){ addFieldError("password", "密码不能为空且必须是3~6位的数字"); } } }

转载于:https://www.cnblogs.com/toge/p/6114721.html

Struts2自定义类型转换器、自定义拦截器和用户输入数据的验证相关推荐

  1. Spring MVC拦截器实现用户登录权限验证案例

    本节将通过拦截器来完成一个用户登录权限验证的 Web 应用 springMVCDemo07,具体要求如下:只有成功登录的用户才能访问系统的主页面main.jsp,如果没有成功登录而直接访问主页面,则拦 ...

  2. java springmvc权限校验_springmvc拦截器实现用户登录权限验证

    实现用户登录权限验证 先看一下我的项目的目录,我是在intellij idea 上开发的 1.先创建一个User类 1 package cn.lzc.po; 2 3 public class User ...

  3. 【Spring5.x】对象的生命周期、配置文件参数化、自定义类型转换器、后置处理Bean

    工厂高级特性 对象的生命周期 创建阶段 初始化阶段 - InitializingBean.init-method 销毁阶段 - DisposableBean.destroy-method 对象的生命周 ...

  4. SpringMVC全局乱码过滤器、注解@RequestParam、自定义类型转换器

    目录 配置全局乱码过滤器 参数绑定注解@RequestParam 注解@RequestParam的参数使用说明 获得Restful风格的参数 自定义类型转换器 自定义转换器的开发步骤: 获得Servl ...

  5. Struts2下创建自定义类型转换器(表单中日期的处理)

    在表单提交中需要有日期的输入,默认的Struts2处理机制可能不能满足需求,需要自定义一下类型转换器.如: String----->java.util.Date:输入 java.util.Dat ...

  6. Struts2自定义类型转换器

    重要重要:以后一定要导对包,到错了一个包纠结了一天重点内容 一.Struts2中有自带类型转换器也有自定义类型转换器 1)比如表单提交的信息有 用户名,生日, 年龄, Action中对应的数据类型分别 ...

  7. struts2教程:12、自定义类型转换器

    自定义类型转换器 有两种:1.局部.2.全局 java.util.Date类型的属性可以接收格式为2009-07-20的请求参数值.但如果我们需要接收格式为20091221的请求参数,我们必须定义类型 ...

  8. Spring MVC自定义类型转换器Converter、参数解析器HandlerMethodArgumentResolver

    文章目录 一.前言 二.类型转换器Converter 1.自定义类型转换器 三.参数解析器 1.自定义分页参数解析器 2.自定义注解参数解析器 一.前言 Spring MVC源码分析相关文章已出: S ...

  9. 创建自定义类型转换器

    三种方法可以创建自定义类型转换器: 实现ognl.TypeConverter接口 继承DefaultTypeConverter类 继承StrutsTypeConverter类 一般使用继承Defaul ...

最新文章

  1. 前端基础之JQuery
  2. ReSimNet: drug response similarity prediction using Siamese neural networks
  3. leetcode每日刷题计划-简单篇day8
  4. sql 导航函数 lag
  5. 【Python】8000字概括精髓,pandas必知必会50例
  6. 设一棵完全二叉树共有500个结点,则在该二叉树中有______个叶子结点
  7. vip地址能ping不通_电脑高手必备ping和netstat命令
  8. Sklearn之Ensemble 估计器
  9. python判断密码是否合法性_菜鸟使用python实现正则检测密码合法性
  10. RestTemplate 了解和学习
  11. 闭包及作用域销毁练习
  12. 省花博会,或将成为跳马百亿产业的跳板
  13. C语言论坛系统课程设计
  14. python基础----Day06
  15. 坯子库怎么导入插件_坯子库插件下载|
  16. 计算机科学与技术专业需要配电脑吗,大一新生开学,需要配台“电脑”吗?辅导员:这4个专业必须配...
  17. appium-desktop Capability
  18. android手动触发ke,手机重启问题快速分析定位指南
  19. 欧拉角和四元数之间转换公式推导
  20. 软考信息安全工程师笔记(第一章--信息安全基础)

热门文章

  1. npm更新模块并同步到package.json中
  2. 对手机图标整理事件总结
  3. C#使用sharppcap实现网络抓包-----2
  4. python小白-day6 ConfigParser模块
  5. java判断一个类是否公共类
  6. WOrd ,excel实现打印功能
  7. C#4.0和VS2010新特性(三)
  8. ssl双向认证和单向认证的区别
  9. BEncode编码方式以及torrent文件的一些内容
  10. 防火墙安装的十步骤,加强网络第一道保护屏