-
类型转换的必要性
在所有基于表现层的解决方法,都需要负责收集用户的请求参数,并将请求参数传给应用的控制器组件,但是所有请求参数都是字符串数据类型。
而Java是强类型语言,因此,MVC框架要求必须将字符串转换成相应的数据类型
-
类型转换的意义
任何成熟的MVC框架,都要解决类型转换的问题,无论是B/S模式还是C/S模式。
在B/S模式下,请求参数是通过浏览器发送到服务器的,参数不可能有丰富的数据类型,因此必须在服务端完成数据类型转换。
传统的类型转换,是纯手工的类型转换,非常繁琐,而Struts2提供了功能非常强大的类型转换支持
-
Struts2内建类型转换器用途
Struts2内建的类型转换器可以让使用者无需自创建类型转换器,因为其可以完成大多数常用类型转换。
通过Struts2的内建类型转换器可以完成常用类型转换,Struts2内建了字符串类型和如下类型之间的类型转换:
boolean或Boolean:完成字符串和布尔类型之间的转换。
char或Character:完成字符串和字符之间的转换。
int或Integer:完成字符串和整型值之间的转换。
long或Long:完成字符串和长整型值之间的转换。
double或Double:完成字符串和双精度值之间的转换。
Date:完成字符串和日期类型之间的转换,日期格式使用用户请求所在Locale的short格式( 'yyyy-MM-dd' )。
数组:默认情况下,数组元素是字符串,如果用户提供了自定义类型的转换器,也可以是其他类型的转换器。
集合:默认情况下,假定集合元素类型为String,并创建一个新的ArrayList封锁所有的字符串。
/**注册页面*/
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<s:form action="RegisterAction" mrthod="post">
<table>
<tr>
<td> <s:textfield name="username" label="用户名"></s:textfield>
</td>
</tr>
<tr>
<td> <s:password name="password" label="密码"></s:password>
</td>
</tr>
<tr>
<td> <s:password name="repassword" label="确认密码"></s:password>
</td>
</tr>
<tr>
<td> <s:textfield name="email" label="邮箱"></s:textfield>
</td>
</tr>
<tr>
<td> <s:textfield name="telephone" label="手机号"></s:textfield>
</td>
</tr>
<tr>
<td> <s:textfield name="birth" label="出生日期"></s:textfield>
</td>
</tr>
<tr>
<td> <s:textfield name="phone" label="固话"></s:textfield>
</td>
</tr>
<tr>
<td> <s:textfield name="address" label="省"></s:textfield>
</td>
</tr>
<tr>
<td> <s:textfield name="address" label="市"></s:textfield>
</td>
</tr>
<tr>
<td> <s:textfield name="address" label="区"></s:textfield>
</td>
</tr>
<tr>
<td> <s:textfield name="address" label="街道"></s:textfield>
</td>
</tr>
<tr>
<td>
<s:property value="info"></s:property>
<s:textfield name="checkCode" label="验证码"></s:textfield>
<img src="imageAction.action" onclick="this.src='imageAction.action'" title="点击图片刷新验证码"/>
</td>
</tr>
<tr>
<td><s:submit value="注册"></s:submit></td>
</tr>
</table>
</s:form>
</body>
</html>
/**Address*/
package com.wfs.entity;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
public class AddressConverter extends StrutsTypeConverter {
@Override
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
// TODO Auto-generated method stub
Address addr = new Address(arg1[0],arg1[1],arg1[2],arg1[3]);
return addr;
}
@Override
public String convertToString(Map arg0, Object arg1) {
// TODO Auto-generated method stub
Address addr = (Address)arg1;
return addr.getProvince()+"省"+addr.getCity()+"市"+addr.getArea()+"区"+addr.getStreet()+"街道";
}
}
/*Register_conversion.properties*/
address=com.wfs.entity.AddressConverter
//Action中的复合类型属性名=带包名的类型转换器