Struts2的类型转换

Struts2类型转换机制
本文探讨了在基于MVC架构的Web应用中,Struts2框架如何解决从用户请求中收集的字符串参数转换为应用所需的数据类型问题。介绍了Struts2内建的类型转换器,包括基本数据类型如boolean、char、int、long、double和Date的转换,以及如何自定义类型转换器。
  • 类型转换的必要性

在所有基于表现层的解决方法,都需要负责收集用户的请求参数,并将请求参数传给应用的控制器组件,但是所有请求参数都是字符串数据类型。

Java是强类型语言,因此,MVC框架要求必须将字符串转换成相应的数据类型

  • 类型转换的意义​​​​​​​

任何成熟的MVC框架,都要解决类型转换的问题,无论是B/S模式还是C/S模式。

B/S模式下,请求参数是通过浏览器发送到服务器的,参数不可能有丰富的数据类型,因此必须在服务端完成数据类型转换。

传统的类型转换,是纯手工的类型转换,非常繁琐,而Struts2提供了功能非常强大的类型转换支持

  • Struts2内建类型转换器用途

​​​​​​​Struts2内建的类型转换器可以让使用者无需自创建类型转换器,因为其可以完成大多数常用类型转换。

通过Struts2的内建类型转换器可以完成常用类型转换,Struts2内建了字符串类型和如下类型之间的类型转换:

booleanBoolean:完成字符串和布尔类型之间的转换。

charCharacter:完成字符串和字符之间的转换。

intInteger:完成字符串和整型值之间的转换。

longLong:完成字符串和长整型值之间的转换。

doubleDouble:完成字符串和双精度值之间的转换。

Date:完成字符串和日期类型之间的转换,日期格式使用用户请求所在Localeshort格式( '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中的复合类型属性名=带包名的类型转换器
  •  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值