Struts上路_09-数据类型转换

1.strtus2的自动类型转换:

1web.xml :

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	
	<!-- Struts2的核心拦截器 -->
	<filter>
		<filter-name>StrutsPrepareAndExecuteFilter</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>StrutsPrepareAndExecuteFilter</filter-name>
		<url-pattern>*.action</url-pattern>
		<url-pattern>*.jsp</url-pattern>
	</filter-mapping>

</web-app>


2struts.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>
 	
	<package name="pkgTypeConvert" namespace="/pkgTypeConvert" extends="struts-default">
		<action name="ActionTypeConvert" class="cn.cvu.action.ActionTypeConvert" method="typeConvert">
			<result name="success">/typeConvert.jsp</result>
		</action>
	</package>

</struts>


3)请求页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>Iindex page</title>
</head>

<body>
	<form action="${ pageContext.request.contextPath }/pkgTypeConvert/ActionTypeConvert.action">
		userName:<input type="text" name="userName"> <br>
		passWord:<input type="password" name="passWord"> <br>
		<input type="submit" value="提交">
	</form>
	
</body>

</html>


4Action处理类:

package cn.cvu.action;

import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class ActionTypeConvert extends ActionSupport {
	
	//与页面元素同名的属性,并且get/set。struts通过反射机制获取
	private String userName;
	private String passWord;

	public String typeConvert() {
		
		//获取参数的方式一,使用ServletActionContext工具类
		HttpServletRequest request = ServletActionContext.getRequest();
		String username = request.getParameter("userName");
		String password = request.getParameter("passWord");
		System.out.println("typeConvert: "+username+","+password+"\n");
		
		//获取参数的方式二,使用struts2自动获取
		System.out.println("User's Message: "+userName+","+passWord);
		
		return "success";
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassWord() {
		return passWord;
	}

	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}

}


5)反馈页面:

<body>
	typeConvert~~~
</body>


6)测试:

Struts上路_09-数据类型转换


2.自定义类型转换:

1)请求页面:

<body>
	<form action="${ pageContext.request.contextPath }/pkgTypeConvert/ActionTypeConvert.action">
		userName:<input type="text" name="userName"> <br>
		passWord:<input type="password" name="passWord"> <br>
		birthday:<input type="text" name="birthday"> <br>
		<input type="submit" value="提交">
	</form>
</body>


2Action处理类:

package cn.cvu.action;

import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class ActionTypeConvert extends ActionSupport {
	
	//与页面元素同名的属性,并且get/set。struts通过反射机制获取
	private String userName;
	private String passWord;
	private Date birthday;

	public String typeConvert() {
		
		//获取参数的方式一,使用ServletActionContext工具类
		HttpServletRequest request = ServletActionContext.getRequest();
		String username = request.getParameter("userName");
		String password = request.getParameter("passWord");
		String birthDay = request.getParameter("birthday");
		System.out.println("typeConvert: "+username+","+password+","+birthDay+"\n");
		
		//获取参数的方式二,使用struts2自动获取
		System.out.println("User's Message: "+userName+","+passWord+","+birthday);
		
		return "success";
	}

	public String getUserName() { }
	public void setUserName(String userName) { }
	public String getPassWord() { }
	public void setPassWord(String passWord) { }

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

}


3)类型转换类:

package cn.cvu.action;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;

public class DateTypeConvert extends DefaultTypeConverter {

	//覆盖此方法
	//value:源类型,toType:目标类型
	public Object convertValue(Object value, Class toType) {
		
		System.out.println("value:" + value +  "toType:" + toType);
		
		//判断输入生日为空
		if (value==null || "".equals(value)) {
			return false;
		}
		//判断目标输出类型为空
		if (toType==null || "".equals(toType)) {
			return false;
		}
		//判断输出是否为目标类型
		if (toType!=java.util.Date.class) {
			return false;
		}
		//确认传入数据位字符串
		if (value instanceof java.lang.String[]) {
			String[] strs = (String[])value;
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
			
			try {
				if (strs != null && strs.length>0) {
					//按照指定格式返回日期
					return sdf.parse(strs[0]);
				}
			} catch (ParseException e) {
				e.printStackTrace();
			}
		}
		
		return new Date();
	}
}


4)属性配置文件:

Action类统计目录。命名格式:需转换参数所在Action-conversion.properties 。

Struts上路_09-数据类型转换

birthday=cn.cvu.action.DateTypeConvert


5)测试:

Struts上路_09-数据类型转换


3.错误信息提示:

1)struts.xml配置:

<struts>
 	
	<package name="pkgTypeConvert" namespace="/pkgTypeConvert" extends="struts-default">
		<action name="ActionTypeConvert" class="cn.cvu.action.ActionTypeConvert" method="typeConvert">
			<result name="success">/typeConvert.jsp</result>

  <!-- input是固定的。全部错误即转到后面的jsp页面 -->
			<result name="input">/errorConvert.jsp</result>  

		</action>
	</package>

</struts>


2)错误页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ taglib uri="/struts-tags" prefix="s" %>  

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	类型转换错误!<br>
	<s:fielderror fieldName="birthday"></s:fielderror>
</body>
</html>


3)类型转换类:

public class DateTypeConvert extends DefaultTypeConverter {

	//覆盖此方法
	//value:源类型,toType:目标类型
	public Object convertValue(Object value, Class toType) {
		
		System.out.println("value:" + value +  "toType:" + toType);
		
		//判断输入生日为空
		if (value==null || "".equals(value)) {
			return false;
		}
		//判断目标输出类型为空
		if (toType==null || "".equals(toType)) {
			return false;
		}
		//判断输出是否为目标类型
		if (toType!=java.util.Date.class) {
			return false;
		}
		//确认传入数据位字符串
		if (value instanceof java.lang.String[]) {
			String[] strs = (String[])value;
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
			
			try {
				if (strs != null && strs.length>0) {
					//按照指定格式返回日期
					return sdf.parse(strs[0]);
				}
			} catch (ParseException e) {
				//如果不抛出异常,struts会认为成功
				throw new RuntimeException(e);
			}
		}
		
		return new Date();
	}
}


4)测试:

Struts上路_09-数据类型转换


5)中文信息提示:

1在和Action类同级目录创建自定义名称的properties文件。

xwork.default.invalid.fieldvalue=\u7C7B\u578B\u8F6C\u6362\u6709\u8BEF"{0}"

Struts上路_09-数据类型转换


2》在struts.xml中加载自定义资源文件。

<struts>

  <!-- 如果有其它资源文件,用逗号隔开 -->
	<constant name="struts.custom.i18n.resources"
    value="cn.cvu.action.error_convert"></constant> 
 	
	<package name="pkgTypeConvert" namespace="/pkgTypeConvert" extends="struts-default">
		<action name="ActionTypeConvert" class="cn.cvu.action.ActionTypeConvert" method="typeConvert">
			<result name="success">/typeConvert.jsp</result>
			
			<result name="input">/errorConvert.jsp</result>
		</action>
	</package>

</struts>


3》测试:

Struts上路_09-数据类型转换


6)针对性中文信息提示:  

1》修改properties文件:针对某个属性进行配置。 

invalid.fieldvalue.birthday=\u751F\u65E5\u8F6C\u6362\u9519\u8BEF

Struts上路_09-数据类型转换

2》测试:

Struts上路_09-数据类型转换


4.全局类型转换:

首先取消上文中的类型转换配置,重命名ActionTypeConvert-conversion.properties。 

1)全局配置文件:

src下创建指定名称的xwork-conversion.properties文件:

内容:目标类型=目标类型转换类

java.util.Date=cn.cvu.action.DateTypeConvert

Struts上路_09-数据类型转换

2)测试:

Struts上路_09-数据类型转换


5.使用avaBean数据封装:

1)请求页面:

<body>
	<form action="${ pageContext.request.contextPath }/pkgTypeConvert/ActionTypeConvert.action">
		<!-- 这里使用了singer.前缀 -->
		userName:<input type="text" name="singer.userName"> <br>
		passWord:<input type="password" name="singer.passWord"> <br>
		
		birthday:<input type="text" name="birthday"> <br>
		<input type="submit" value="提交">
	</form>
</body>


2JavaBean

package cn.cvu.bean;

public class BeanSinger {
	private String userName;
	private String passWord;
	
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassWord() {
		return passWord;
	}
	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}
	@Override
	public String toString() {
		return "BeanSinger [userName=" + userName + ", passWord=" + passWord
				+ "]";
	}
	
}


3Action处理类:

package cn.cvu.action;

import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import cn.cvu.bean.BeanSinger;
import com.opensymphony.xwork2.ActionSupport;

public class ActionTypeConvert extends ActionSupport {
	
	//使用一个JavaBean对数据进行封装
	private BeanSinger singer;
	
	private Date birthday;

	public String typeConvert() {
		
		//方式一,使用ServletActionContext
		HttpServletRequest request = ServletActionContext.getRequest();
		String username = request.getParameter("singer.userName");
		String password = request.getParameter("singer.passWord");
		String birthDay = request.getParameter("birthday");
		System.out.println("typeConvert: "+username+","+password+","+birthDay+"\n");
		
		//方式二,使用struts2自动化
		System.out.println("User's Message: "+singer.toString()+","+birthday);
		
		return "success";
	}

	public BeanSinger getSinger() {
		return singer;
	}

	public void setSinger(BeanSinger singer) {
		this.singer = singer;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

}


4)测试:

Struts上路_09-数据类型转换

- end

你可能感兴趣的:(mvc,struts,struts2,javaweb,Webwork)