自己定義struts2中action類型轉換器
阿新 • • 發佈:2017-07-16
ansi work row 接受 4.0 open 技術 oos lang
struts2.xml:
date.jsp:
然後在DateAction所在包下創建DateAction-conversion.properties文件。這裏DateAction為所要進行參數類型轉換的action,其它格式固定,即:XXX-conversion.properties
DateAction.java中代碼例如以下:
package com.itheima.action; import java.util.Date; public class DateAction { private Date time; public Date getTime() { return time; } public void setTime(Date time) { this.time = time; } public String execute() { return "success"; } }
struts2.xml:
<action name="dateAction" class="com.itheima.action.DateAction"> <result name="success">/date.jsp</result> </action>
date.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> ${time } </body> </html>
代碼如上,假設在地址欄輸入:
http://localhost:8080/struts2_itheima/dateAction?
time=2011-01-04
控制臺和jsp都可以正常輸出:
可是假設地址欄輸入:
http://localhost:8080/struts2_itheima/dateAction?
time=20110104
控制臺輸出null,網頁則輸出
這是由於此種輸入方式,time參數傳遞的是String類型。調用setTime(Date time)方法出錯,此時private Date time;獲取到的值為空。
可是jsp能原樣輸出是由於struts2底層當setTime(Date time)方法出錯時會自己主動獲取參數的值原樣輸出
解決以上問題的方式是創建自己定義類型轉換器:
DateTypeConverter.java:
package com.itheima.type.converter; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter; public class DateTypeConverter extends DefaultTypeConverter { @Override public Object convertValue(Map<String, Object> context, Object value, Class toType) { /* value:被轉換的數據,因為struts2須要接受全部的請求參數,比方復選框 toType:將要轉換的類型 */ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyymmdd"); if(toType == Date.class) { /* * 因為struts2須要接受全部的請求參數。比方復選框,這就導致一個參數名稱相應多個值。 * 所以框架採用getParamterValues方法獲取參數值,這就導致獲取到的為字符串數組 * 所以value為字符串數組 */ String[] strs = (String[])value; Date time = null; try { time = dateFormat.parse(strs[0]); } catch (ParseException e) { e.printStackTrace(); throw new RuntimeException(e); } return time; } else if(toType == String.class){ Date date = (Date)value; String time = dateFormat.format(date); return time; } return null; } }
然後在DateAction所在包下創建DateAction-conversion.properties文件。這裏DateAction為所要進行參數類型轉換的action,其它格式固定,即:XXX-conversion.properties
DateAction-conversion.properties內容例如以下:
time=com.itheima.type.converter.DateTypeConverter項目樹:
====================================================================================================
以上的是針對某一個action的局部類型轉換器。
也能夠創建全局類型轉換器,這裏僅僅須要改動資源文件:
在WEB-INF/classes文件夾下創建xwork-conversion.properties,在該文件裏配置的內容為:
待轉換的類型=類型轉換期的全類名
本例:
java.util.Date=com.itheima.type.converter.DateTypeConverter這樣全部的action都會擁有該類型轉換器
自己定義struts2中action類型轉換器