struts转换器:在B/S应用中,将字符串请求参数转换为相应的数据类型,是MVC框架提供的功能,而Struts2是很好的MVC框架实现者,理所当然,提供了类型转换机制。

一、类型转换的意义

对于一个智能的MVC框架而言,不可避免的需要实现类型转换.因为B/S(浏览器/服务器)结构应用的请求参数是通过浏览器发送到服务器的,这些参数不可能有丰富的数据类型,因此必须在服务器端完成数据类型的转换

MVC框架是一个表现层解决方案,理应提供类型转换的支持,Struts2提供了功能非常强大的类型转换支持.

二、表现层数据的处理

1、对于web应用而言,表现层主要用于与用户交互,包括收集用户输入数据,向用户呈现服务器的状态。因此表现层的数据的流向主要有两个方向:输入数据和输出数据。

2、对于输入数据:则需要完成由字符串数据向多种类型数据的转化。程序通常无法自动完成,需要在代码中手动转化

3、对于输出数据:不管是java或是jsp都支持多种数据类型的直接输出。

4、表现层另外一个数据处理是:数据校验,分为客户校验和服务器端校验.后边会重点讲解

三、类型转换

1、HTTP参数都是字符串类型。 保存的数据可能是字符串、数字、布尔、日期时间等或者JavaBean类型。 手工的类型转换,比如将字符串转换为日期,通过: 通过request.getParameter方法获取字符串; 检查是否为空; 通过DateFormat.parse方法将字符串转换为Date对象

2、Struts2类型转换

Struts2内置的类型转换
String和boolean 完成字符串与布尔值之间的转换
String和char  往常字符串与字符之间的转换
String和int、Integer 完成字符串与整型之间的转换
String和Long 完成字符串与长整型值之间的转换
String和double、Double 完成字符串与双精度浮点值的转换
String和Float 完成字符串和单精度浮点之间的转换
String和Date 完成字符串和日期类型之间的转换,日期格式使用格式用户请求所在Locale的SHORT格式
String和数组 在默认的情况,数组元素是字符串,如果用户定义类型转换器,也可以是其它复合数据类型
String和Map、List

***************************************************************************************

应用场景:输出界面/输出界面 与 对象/数据库不是一一对应的关系。或者格式不一样。
例如:输入身份证号,自动解析出生日或其它信息。

首先做一个Student.java类:

package com.itnba.maya.model;

public class Student {
private String name;
private String idNumber;// 身份证号
private String birthday;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIdNumber() {
return idNumber;
}
public void setIdNumber(String idNumber) {
this.idNumber = idNumber;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
} }

配置struts.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <action name="*_*" class="com.itnba.maya.controller.{1}Action" method="{2}"> <result>
{1}_{2}.jsp
</result>
</action>
</package> </struts>

再做一个StudentAction.java类:

package com.itnba.maya.controller;

import com.itnba.maya.model.Student;
import com.opensymphony.xwork2.ActionSupport; public class StudentAction extends ActionSupport {
private Student stu; public Student getStu() {
return stu;
}
public void setStu(Student stu) {
this.stu = stu;
}
public String input(){
return SUCCESS;
}
public String show(){ return SUCCESS;
}
}

做转换器的类。 --- 继承StrutsTypeConverter

package com.itnba.maya.util;

import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

import com.itnba.maya.model.Student;

public class Zhuanhuanqi extends StrutsTypeConverter {

    @Override
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
String str = arg1[0]; //370303199009210989 //截取对应的日期
String year = str.substring(6, 10);
String month = str.substring(10, 12);
String day = str.substring(12, 14); Student stu = new Student();
stu.setBirthday(year+"-"+month+"-"+day);//获取到生日
stu.setIdNumber(str);//重新把身份证附给IdNumber return stu;
} @Override
public String convertToString(Map arg0, Object arg1) { return null;
}
}

转换器的配置:

全局配置和局部配置都可以实现,写一个即可

1.全局配置。在src根下,建立xwork-conversion.properties文件。

配置好实体类与转换类的二者完全限定名对应关系。如com.itnba.maya.model.Student=com.itnba.maya.util.Zhuanhuanqi

2.局部配置。在action的包里面,建立Action类名-conversion.properties文件(StudentAction-conversion.properties)。

配置好成员变量与转换类的对应关系。如stu=com.itnba.maya.util.Zhuanhuanqi

 

jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>学生信息录入</h1>
<form action="Student_show" method="post">
姓名:<input type="text" name="stu.name"><br>
身份证号:<input type="text" name="stu"><br>
<input type="submit" value="submit">
</form>
</body>
</html>

显示名字、生日、身份证号

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${stu.name } -- ${stu.idNumber } --${stu.birthday } <s:debug></s:debug>
</body>
</html>

显示结果:

struts转换器的更多相关文章

  1. struts转换器详解

    struts转换器:在B/S应用中,将字符串请求参数转换为相应的数据类型,是MVC框架提供的功能,而Struts2是很好的MVC框架实现者,理所当然,提供了类型转换机制. 一.类型转换的意义 对于一个 ...

  2. Struts框架的核心业务

    Struts的核心业务 Struts核心业务有很多,这里主要介绍了比较简单一些的: 请求数据的处理,和数据自动封装,类型自动转换 1.Struts中数据处理 1.1.方式1:直接过去servletap ...

  3. Struts的类型转换

    struts中jsp提交的数据,struts会自动转换为action中的属性类型: 对于基本的数据类型以及日期类型会自动转换: 就像前面那一篇博客的代码封装一样,会把字符串类型传过来的数据转化为相应的 ...

  4. Struts2转换器配置和用法

    struts转换器:在B/S应用中,将字符串请求参数转换为相应的数据类型,是MVC框架提供的功能,而Struts2是很好的MVC框架实现者,理所当然,提供了类型转换机制. 一.类型转换的意义 对于一个 ...

  5. struts局部、全局类型转换器

    第01步:编写bean package com.self.bean; import java.util.Date; public class User { private Date birthday ...

  6. Struts入门学习(三)---自定义类型转换器

    类型转换器是将浏览器传递的参数进行转换为了与服务器端的参数匹配,先举个例子如果我们想往服务器传递日期类型的参数时我们要怎么让浏览器传过去的让服务器明白 我们新建一个类 ConverterTest.ja ...

  7. Struts(二十):自定义类型转换器

    如何自定义类型转换器: 1)为什么需要自定义类型转化器?strtuts2不能自动完成字符串到所有的类型: 2) 如何定义类型转化器? 步骤一:创建自定义类型转化器的类,并继承org.apache.st ...

  8. Struts 2 类型转换器 输入校验 拦截器

    Struts 2中内建了字符串类型和常见类型之间相互转换的转换器,能满足大多数转换需求,但不能完成字符串和User对象之间的转换. OGNL项目中有一个TypeConvert接口,这个接口是自定义类型 ...

  9. Struts 2 之类型转换器

    Struts2自定义类型转换器分为局部类型转换器和全局类型转换器 (1)局部类型转换器 如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用d ...

随机推荐

  1. DRF(3) - 序列化组件(GET/PUT/DELETE接口设计)、视图优化组件

    一.序列化组件 基于上篇随笔的表结构,通过序列化组件的ModelSerializer设计如下三个接口: GET 127.0.0.1:8000/books/{id} # 获取一条数据,返回值:{} PU ...

  2. 48dp rhythm

  3. PHP memcache的使用教程

    (结尾附:完整版资源下载) 首先,为什么要用memcached?如果你看过InnoDB的一些书籍,你应该知道在存储引擎那一层是由一个内存池的.而在内存池中 又有一个缓冲池.而缓冲池就会缓冲查找的数据, ...

  4. 重置Linux普通账号和root账号密码

    今天想在Linux测试下HTTPie, 突然发现虚拟机里面的Linux, root账号和普通账号密码都忘记了. 百度了半天发现答案都不对, 最后用Google搜到了答案. 本人系统环境: VMware ...

  5. mysqlbinlog作用

    mysqlbinlog:解析mysql的binlog日志 在 mysql-bin.index里面记录了所有的binlog文件,它是一个索引 binlog日志的作用:用来记录mysql内部增删改查等对m ...

  6. 学员管理系统(简单的Django设计)

    学员管理系统(简单的Django设计) 学员管理系统 项目规划阶段 项目背景 近年来老男孩教育的入学学员数量稳步快速增长,传统的excel统计管理学员信息的方式已经无法满足日渐增长的业务需求.因此公司 ...

  7. pytharm提示过期 License Activation 解决办法

    遇到如下问题: 打开网站:  http://idea.lanyus.com/   next next ok    

  8. HDFS 详解

    HDFS 概述 基于2.7.3 HDFS 优点: 1.高容错性 数据自动保存多个副本,默认是三个副本 副本丢失后,会自动恢复 2.适合批处理 移动计算而非移动数据,批处理的时候,数据量很大,移动数据是 ...

  9. shell脚本 入门 —— 符号篇

    shell Shell就是一个命令行解释器,它的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive). Shell还有一种执行命令的方式称 ...

  10. TCP的握手与挥手

    轻轻的TCP走了,正如TCP轻轻的来,TCP挥一挥手,传递了不知多少信息 看到哪,记到哪,想起哪,就看哪,这就是我的博客园,很随性 ---------------------------------- ...