Struts2转换器配置和用法
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.dao;
public class Student {
private String name;
private String idcard;
private String birthday;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIdcard() {
return idcard;
}
public void setIdcard(String idcard) {
this.idcard = idcard;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
}
再做一个StudentAction.java类:
package com.controller; import com.dao.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;
}
}
配置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="false" /> <package name="default" namespace="/" extends="struts-default"> <action name="*_*" class="com.controller.{1}Action" method="{2}"> <result>
{1}/{2}.jsp
</result>
</action>
</package> </struts>
创建文件夹Student,再创建input.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> //这里的name=“stu.name” 就不用走转换器转换,因为通过后面页面接受的数据可以看出,直接就接收的事stu.name类型。
身份证号:<input type="text" name="stu" ><br> //这里的name=“stu”就是走的转换器转换,因为他定义的事stu这个实体类,必须通过转换器转换成他的成员类
<input type="submit" value="go" >
</form>
</body>
</html>
创建show.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
${stu.name }---${stu.idcard }---${stu.birthday }
</body>
</html>
下面就是创建一个拦截器名为StudentConverter.java:
package com.util;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.dao.Student;
public class StudentConverter extends StrutsTypeConverter {
@Override
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {//字符串-->对象
String str= arg1[0];
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.setIdcard(str);
return stu;
}
@Override
public String convertToString(Map arg0, Object arg1) {//对象-->字符串
// TODO 自动生成的方法存根
return null;
}
}
再就是在src根目录下创建一个文件,名为xwork-conversion.properties:
com.dao.Student=com.util.StudentConverter;
上面这句话的意思为实体类与转换类的二者完全限定名对应关系。
其实这里有两种配制方法:
第一种:全局配置。在src根下,建立xwork-conversion.properties文件。配置好实体类与转换类的二者完全限定名对应关系。
第二种:局部配置。在action的包里面,建立Action类名-conversion.properties文件(StudentAction-conversion.properties)。
配置好成员变量与转换类的对应关系。stu=com.itnba.maya.util.StudentConverter
实现效果如下:


Struts2转换器配置和用法的更多相关文章
- Struts2 基本配置
Struts2是一个优秀的MVC框架,也是我比较喜欢用的框架.它个各种配置基本都可以集中在一个xml文档中完成.现在让我们看看如何简单几步实现常用功能. 一.搭建Struts2的开发环境 1)首先是利 ...
- Struts2 XML配置详解
struts官网下载地址:http://struts.apache.org/ 1. 深入Struts2的配置文件 本部分主要介绍struts.xml的常用配置. 1.1. 包配置: S ...
- struts2 action配置时 method 省略不写 默认执行方法是父类ActionSuppot中的execute()方法
struts2 action配置时 method 省略不写 默认执行方法是父类ActionSuppot中的execute()方法
- struts2环境配置
struts2环境配置 struts2框架,大多数框架都在使用.由于工作需要,开始做Java项目.先学个struts2. 一.下载struts2 有好多版本,我下载的是struts-2.2.1.1. ...
- 在Struts2中配置Action
在Struts2中配置Action <package>: 1.定义Action使用<package>标签下的<action>标签完成,一个<package&g ...
- Struts2的配置
Struts2的配置 Struts2可以通过Convention插件管理Action和结果映射,也可以通过使用XML文件进行管理,这两种方式各有好处:使用Convention插件管理减少了XML文件的 ...
- Struts2的配置和一个简单的例子
Struts2的配置和一个简单的例子 笔记仓库:https://github.com/nnngu/LearningNotes 简介 这篇文章主要讲如何在 IntelliJ IDEA 中使用 Strut ...
- 1-1 struts2 基本配置 struts.xml配置文件详解
详见http://www.cnblogs.com/dooor/p/5323716.html 一. struts2工作原理(网友总结,千遍一律) 1 客户端初始化一个指向Servlet容器(例如Tomc ...
- spring+hibernate+struts2零配置整合
说句实话,很久都没使用SSH开发项目了,但是出于各种原因,再次记录一下整合方式,纯注解零配置. 一.前期准备工作 gradle配置文件: group 'com.bdqn.lyrk.ssh.study' ...
随机推荐
- 第一节 如何用Go实现单链表
一.概念介绍 下面这副图是我们单链表运煤车队. 每节运煤车就是单链表里的元素,每节车厢里的煤炭就是元素中保存的数据.前后车通过锁链相连,作为单链表运煤车,从1号车厢开始,每节车厢都知道后面拉着哪一节车 ...
- Js中处理数据的常用内置方法
以下方法均不会修改操作数本身,只是将操作数处理后的数据返回 1.丢弃小数部分,保留整数部分 parseInt(x);//丢弃x中的小数部分,保留x中的整数部分 2.Math对象常用的方法 ceil(x ...
- nodejs fastdfs
node端fastdfs客户端上传文件 var FdfsClient = require('fdfs'); var fdfs = new FdfsClient({ // tracker servers ...
- 20155214曾士轩 2016-2017-2 《Java程序设计》第1周学习总结
20155214曾士轩 2006-2007-2 <Java程序设计>第1周学习总结 教材学习内容总结 浏览教材,根据自己的理解每章提出一个问题 1.标准API的架构指的是什么? 2.一个项 ...
- 2017-2018-1 《信息安全技术》实验二——Windows口令破解
2017-2018-1 <信息安全技术>实验二--Windows口令破解 所用工具 系统:能勾起我回忆的Windows 2003 工具:LC5.SuperDic Windows口令破解 口 ...
- Linux 下 的 Oracle,如何安装 tnsname
运行 netca 即可:
- 【信息安全】MD5加密浅析
前段时间,网传京东泄露了几G的用户数据,后面又说用户数据是MD5加密的,让大家不要担心,改个密码之类云云. 出于好奇,上网了解了一下这个MD5. 一.MD5加密方式是什么 简单讲,MD5加密是一个用到 ...
- 面试之HTTP基础(不断完善中)
目录 1. HTTP状态码 2.Cookie和Session Cookie Session 3.短连接与长连接 4.HTTPs 加密 5.Http和https的区别 6.HTTP/1.0 与 HTTP ...
- 行驶证识别/行驶证OCR识别全方位解析
本文全面解析行驶证OCR识别,包括什么是行驶证OCR识别.如何选择行驶证识别软件.如何操作行驶证识别软件,以及该软件应用的领域等. 一.了解行驶证识别/行驶证OCR识别 行驶证OCR识别技术,也叫行驶 ...
- JAVA学习笔记--字符串概述
一.String类 String类代表字符串,是由字符构成的一个序列.创建String对象的方法很简单,有以下几种: 1)用new来创建: String s1 = new String("m ...