我们碰到过很多情况,就是时间日期常常会出现错误,这是我们最头疼的事,在struts2中有一些内置转换器,也有一些需要我们自己配置。

我们为什么需要类型转换呢?

在基于HTTP协议的Web应用中 客户端请求的所有内容(表单中提交的内容等)都以文本编码的方式传输到服务器端
但服务器端的编程语言(如Java)有着丰富的数据类型 如 int boolean Date 等等
因此 当这些参数进入应用程序时 必须被转换成适合的服务器端编程语言的数据类型

在Servlet中 类型转换工作是由开发者自己完成的,例如:

String s=request.getParameter("pageIndex");
  int pageIndex=Integer.parseInt(s);

类型转换的工作是必不可少的 重复性的. 如果有一个良好的类型转换机制 必将大大节省开发时间,提高开发效率。

Struts2提供了强大的类型转换功能:

内置转换器:

对于大部分的常用类型 开发人员在开发过程中不需要自己编码实现类型转换 这是因为在Struts2框架爱中可以完成大多数常用的类型转换
 //由内部提供的类型转换器完成
 1.String 将 int long double boolean String数组或者java.util.Date类型转换为字符串
 2.boolean/Boolean 在字符串和布尔值之间转换
 3.char/Character 在字符串和字符之间进行转换
 4.int/Integer float/Float  long/Long double/Double
 5.Date 在字符串和日期只见进行转换 具体输入输出格式与当前的local有关
 6.数组和集合 在字符串数组和数组对象 几何对象之间进行转换

接下来我们讲解一下自定义类型转换器:

1.0创建一个Action来继承ActionSupport

public class StudentAction extends ActionSupport {
private Date date; public Date getDate() {
return date;
} public void setDate(Date date) {
this.date = date;
} @Override
public String execute() throws Exception {
System.out.println(date);
return SUCCESS;
}
}

2.0创建一个DateAction继承StrutsTypeConverter

public class DateAction extends StrutsTypeConverter {

    private static final List<SimpleDateFormat> list=new ArrayList<SimpleDateFormat>();
static {
list.add(new SimpleDateFormat("yyyy/MM/dd"));
list.add(new SimpleDateFormat("yyyy-MM-dd"));
}
public Object convertFromString(Map context, String[] values, Class toClass) {
String date=values[];
for (SimpleDateFormat item:list){
try {
return item.parse(date);
} catch (ParseException e) {
continue;
}
}
throw new TypeConversionException();
} public String convertToString(Map map, Object o) {
System.out.println(new Date()+"============================");
return o.toString();
}
}

3.0创建StudentAction-conversion.properties

date=cn.converter.DateAction

4.0Struts.xml中的配置

    <package name="default" namespace="/" extends="struts-default">
<action name="stuAction" class="cn.action2.StudentAction">
<result>/converter/success.jsp</result>
<result name="input">/converter/index.jsp</result>
</action>
</package>

5.0页面

index.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<title>登陆页面</title>
<body>
<s:fielderror></s:fielderror>
<s:form action="stuAction" method="POST">
<s:textfield name="date"></s:textfield>
<s:submit value="提交"></s:submit>
</s:form>
</body>
</html>

success.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>成功页面</title>
</head>
<body>
欢迎你:<s:property value="date"></s:property></body>
</html>

这就是自己设置类型转换的案例。。。。。

Struts 类型转换之局部和全局配置的更多相关文章

  1. mybatis全局配置mybatis-config.xml

    大部分时候,我们都是在Spring 里面去集成MyBatis.因为Spring 对MyBatis 的一些操作进行的封装,我们不能直接看到它的本质,所以先看下不使用容器的时候,也就是编程的方式,MyBa ...

  2. mybatis(二)全局配置mybatis-config.xml

    转载:https://www.cnblogs.com/wuzhenzhao/p/11092526.html 大部分时候,我们都是在Spring 里面去集成MyBatis.因为Spring 对MyBat ...

  3. struts中的常量,action配置中的默认值

    1.struts中Action的开发方式 继承ActionSupport类,这种方法实现的Action可以进行数据校验: 实现Action接口: 不继承任何类,不实现任何接口: 是否继承类或实现接口, ...

  4. 4、mybatis动态sql+struts2(通配符+全局配置+分页)

    1.创建userinfo.sql数据库脚本 create table USERINFO ( id NUMBER not null, uname ), password ), age NUMBER ) ...

  5. vue入门全局配置

    全局配置 Vue.config 是一个对象,包含 Vue 的全局配置.可以在启动应用之前修改下列属性: silent 类型:boolean 默认值:false 用法: Vue.config.silen ...

  6. API(全局配置,全局API)

    全局配置 Vue.config是一个对象,包含Vue的全局配置 silent 类型:boolean 默认值:false 用法 Vue.config.silent=true 取消Vue所有的日志与警告 ...

  7. 009-Spring Boot全局配置跨域请求支持

    1.Spring Boot 2.0以前全局配置跨域主要是继承WebMvcConfigurerAdapter @Configuration public class CorsConfig extends ...

  8. iview Message(全局提示)与Notice(通知提醒)全局配置方法

    在使用iview 的Message与Notice组件时,可以对提示框的显示位置与显示时长进行配置. iview提供了两个配置属性.分别是: top 提示组件距离顶端的距离,单位像素. duration ...

  9. Keepalived的全局配置

    Keepalived的全局配置 默认配置文件如下: ! Configuration File for keepalived global_defs { notification_email { aca ...

随机推荐

  1. centos和ubuntu的网络属性配置

        一. centos的网络配置    1.  修改 /etc/sysconfig/network-scripts/ifcfg-IFACE:             DEVICE:此配置文件应用到 ...

  2. linux安装spark-2.3.0集群

    (安装spark集群的前提是服务器已经配置了jdk并且安装hadoop集群(主要是hdfs)并正常启动,hadoop集群安装可参考<hadoop集群搭建(hdfs)>) 1.配置scala ...

  3. C++多线程编程二

    1. 死锁与解锁: #include <iostream> #include <thread> #include <mutex> using namespace s ...

  4. JS对Date的扩展,将 Date 转化为指定格式的String

    /** * 对Date的扩展,将 Date 转化为指定格式的String * 月(M).日(d).12小时(h).24小时(H).分(m).秒(s).周(E).季度(q) 可以用 1-2 个占位符 * ...

  5. table组件选中数据回显

    table组件多选状态下,把已选择的数据回显,需要在多选列上加上一个属性 :reserve-selection="true" 实例如下: <el-table :data=&q ...

  6. Java多线程笔记[未更新完]

    最近课上可摸鱼时间较多,因此并发开坑学习 本篇学习自Java多线程编程实战指南 目前进展:刚开坑,处于理解概念阶段 本篇学习自Java多线程编程实战指南 Q.进程和线程的区别 进程Process是程序 ...

  7. 16个最佳响应式HTML5框架分享

    HTML5框架可以快速构建响应式网站,它们帮助程序员减少编码工作,减少冗余的代码.如今有很多免费的HTML5框架可供使用,由于它们有着响应式设计.跨浏览器兼容.相对轻量级等特点,这些框架在开发中都十分 ...

  8. nodejs(四) --- cluster模块详解

    什么是cluster模块,为什么需要cluster模块?  cluster在英文中有集.群的意思. nodejs默认是单进程的,但是对于多核的cpu来说, 单进程显然没有充分利用cpu,所以,node ...

  9. spring boot快速入门 1 :创建项目、 三种启动项目方式

    准备工作: (转载)IDEA新建项目时,没有Spring Initializr选项 最近开始使用IDEA作为开发工具,然后也是打算开始学习使用spring boot. 看着博客来进行操作上手sprin ...

  10. shiro学习笔记_0600_自定义realm实现授权

    博客shiro学习笔记_0400_自定义Realm实现身份认证 介绍了认证,这里介绍授权. 1,仅仅通过配置文件来指定权限不够灵活且不方便.在实际的应用中大多数情况下都是将用户信息,角色信息,权限信息 ...