<?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="type" namespace="/type" extends="struts-default">
<!-- 傳回視圖 -->
<action name="type" class="star.july.b_type.TypeAction" method="type">
<result name="success">/index.jsp</result>
<!-- 定義錯誤視圖 -->
<result name="input">/add.jsp</result>
</action>
</package>
</struts>
建立實體類:
package star.july.b_type;
import java.util.Date;
public class Student {
//不同的類型,輸出時會相應的類型
private String name;
private int age;
private double grade;
private Date birth;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getGrade() {
return grade;
}
public void setGrade(double grade) {
this.grade = grade;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", grade=" + grade
+ ", birth=" + birth + "]";
}
}
自定義類型轉換器:
package star.july.b_type;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
//自定義類型轉換器
public class MyDateConverter extends StrutsTypeConverter{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/mm/dd");
//頁面(String)->Action(自己的類型)
//values:頁面傳入的字元串
//toClass:目前javabean屬性類型,java.util.Date
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
//轉換日期類型
//将1994/11/02 轉為符合的格式
try {
//如果是Date類型才需要轉換
if(toClass==java.util.Date.class){
String str = values[0];
//轉換成Date類型
Date date = sdf.parse(str);
return date;
}
return null;
} catch (ParseException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
//Action->轉換為String
@Override
public String convertToString(Map arg0, Object arg1) {
// TODO Auto-generated method stub
return null;
}
}
TypeAction:
package star.july.b_type;
import com.opensymphony.xwork2.ActionSupport;
public class TypeAction extends ActionSupport{
//建立一個對象
Student student;
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
public String type(){
//攔截器自動轉換類型
//類型與Student.java實體類中的類型相呼應
//輸出結果:Student [name=趙甲第, age=22, grade=150.0, birth=Wed Dec 07 00:00:00 CST 1994]
System.out.println(student);
return SUCCESS;
}
}
定義TypeAction-conversion.properties檔案 檔案名是由:相關聯的類型的類名+“-conversion.properties”
student.birth=gz.itcast.b_type.MyDateConverter
jsp頁面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>類型轉換</title>
1.
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<!--
<link rel="stylesheet" type="text/css" href="styles.css" target="_blank" rel="external nofollow" >
-->
</head>
<!-- 傳回input視圖傳來的錯誤資訊 -->
<s:fielderror></s:fielderror>
<body>
<form action="<c:url value='/type/type'/>" method="post">
姓名:<input type="text" name="student.name"/><br>
年齡:<input type="text" name="student.age"/><br>
成績:<input type="text" name="student.grade"/><br>
日期:<input type="text" name="student.birth"/><br>
<input type="submit" value="送出"/>
</form>
</body>
</html>
局部引用: 對某個Action起作用 在Action類的同目錄下,建立一個檔案:叫 Action類名-conversion.properties(TypeAction-cnversion.properties)
student.birth=star.july.b_type.MyDateConverter |
全局引用:對整個網站的所有Action起作用 在項目的src下面,建立一個檔案: xwork-conversion.properties
java.util.Date= star.july .b_type.MyDateConverter |