亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Struts2學習筆記2_轉換器的使用

系統 1529 0
一、轉換自定義類的基本方法

1.1 新建2個自定義的類
    
package com.test.bean;
/**
* 三維點(x,y,z)
*/
public class Point {	
	private Integer x;
	private Integer y;
	private Integer z;	
	//  setter和getter
}
  

    
package com.test.bean;
/**
* 矩形(height,width)
*/
public class Rectangle {
	private Integer height;
	private Integer width;
	//  setter和getter
}

  


1.2 新建Action,添加屬性
    
public class TestAction extends ActionSupport {

	private Integer intNumber;    //整數
	private Float floatNumber;	//小數
	private Date date;		//時間
	private Point point;		//自定義的點
	private Rectangle rectangle;	//自定義的矩形
	// setter和getter
	@Override
	public String execute() throws Exception {
		return SUCCESS;
	}
}

  

1.3 輸入輸出頁面(JSP)
input.jsp:
    
<h3>轉換器的使用</h3>
<s:form action="test" method="post">
   	<s:textfield name="intNumber" label="整數" />
   	<s:textfield name="floatNumber" label="浮點數" />
   	<s:textfield name="date" label="時間" />
   	<s:textfield name="point" label="三維坐標(x,y,z)" />
   	<s:textfield name="rectangle" label="矩形(h,w)" />
   	<s:submit value="提交" />
</s:form>

  

output.jsp:
    
<h3>轉換后的結果</h3>
整數:<s:property value="intNumber" /><br>
浮點數:<s:property value="floatNumber" /><br>
時間:<s:property value="date" /><br>
三維點:<s:property value="point" /><br>
矩形:<s:property value="rectangle" />

  

省略標簽的導入

1.4 web.xml中配置filter,struts.xml配置action 省略........

2.1 新建轉換器,繼承ognl.DefaultTypeConverter
    
package com.test.converter;
public class PointConverter extends DefaultTypeConverter {

	@Override
	public Object convertValue(Map context, Object value, Class toType) {
		if(Point.class==toType){   //目標類型為Point類型
			Point point = new Point();
			String[] strs = (String[])value;   //頁面上傳過來的是String數字
			String[] params = strs[0].split(",");  //假設規定以,分隔坐標
			Integer x = Integer.valueOf(params[0]);
			Integer y = Integer.valueOf(params[1]);
			Integer z = Integer.valueOf(params[2]);
			point.setX(x);
			point.setY(y);
			point.setZ(z);
			return point;
		}	
		if(String.class==toType){  	//目標類型為String類型
			Point point = (Point)value;
			//將對象以字符串返回
			StringBuilder sb = new StringBuilder()	
				.append("[x=").append(point.getX())
				.append(",y=").append(point.getY())
				.append(",z=").append(point.getZ()).append("]");
			return sb.toString();			
		}
		return null;
	}
}

  
    
package com.test.converter;
public class RectangleConverter extends DefaultTypeConverter {

	@Override
	public Object convertValue(Map context, Object value, Class toType) {
		if(Rectangle.class==toType){    //目標類型為Rectangle類型
			Rectangle rectangle = new Rectangle();
			String[] strs = (String[])value;	//頁面上傳過來的是String數組
			String[] params = strs[0].split(",");	//假設規定以,分隔高和寬
			Integer height = Integer.valueOf(params[0]);
			Integer width = Integer.valueOf(params[1]);
			rectangle.setHeight(height);
			rectangle.setWidth(width);
			return rectangle;
		}	
		if(String.class==toType){
			Rectangle rectangle = (Rectangle)value;
			//將對象以字符串返回
			StringBuilder sb = new StringBuilder()
				.append("[heigh=").append(rectangle.getHeight())
				.append(",width=").append(rectangle.getWidth()).append("]");
			return sb.toString();			
		}
		return null;
	}	
}

  

2.2 struts2如何調用我們的轉換器?
在Action的同目錄下建立對應的XxxxAction-conversion.properties? XxxxAction的名字對應Action類的名字 ,比如這里為 TestAction-conversion.properties:

#對屬性進行轉換注冊(其實是setter和getter方法)
point =com.test.converter.PointConverter
rectangle =com.test.converter.RectangleConverter

2.3 測試



eg:如果Action中有多個point屬性和rectangle屬性,則在properties中
添加:
point2 =com.test.converter.PointConverter
point3 =com.test.converter.PointConverter
...

問題:如果有很多Action,這些Action中又有很多需要進行轉換的類,豈不是要寫很多properties?


二、使用全局的properties
在src目錄下建立 xwork-conversion.properties :
com.test.bean.Point =com.test.converter.PointConverter
com.test.bean.Rectangle =com.test.converter.RectangleConverter

注釋掉TestAction-conversion.properties (使用 #),運行效果一樣

三、轉換器繼承StrutsTypeConverter

3.1 放棄convertValue方法

3.2 實現方法:
    
public Object convertFromString(Map map, String[] strs, Class toType) {
	// 直接把String數組 轉換成 toType類型
}
public String convertToString(Map map, Object obj) {
	// 直接把 obj 轉換成 String類型
}
  


四、集合類型的轉換
4.1 Action中:
    
package com.test.action;
public class TestAction extends ActionSupport {
	private Integer intNumber; //整數
	private Float floatNumber;	//小數
	private Date date;		//時間
	private List<Point> point;	//自定義的點集合
	private Rectangle rectangle;	//自定義的矩形
	//  setter和getter

	@Override
	public String execute() throws Exception {
		return SUCCESS;
	}
}

  


4.2 轉換器中:
    
package com.test.converter;
public class PointConverter extends StrutsTypeConverter {	

	public Object convertFromString(Map map, String[] strs, Class toType) {
		Point point = null;
		List<Point> list = new ArrayList<Point>();
		for (int i = 0; i < strs.length; i++) {
			point = new Point();
			String[] params = strs[i].split(",");
			Integer x = Integer.valueOf(params[0]);
			Integer y = Integer.valueOf(params[1]);
			Integer z = Integer.valueOf(params[2]);
			point.setX(x);
			point.setY(y);
			point.setZ(z);
			list.add(point);
		}
		return list;
	}
	
	public String convertToString(Map map, Object obj) {
		List<Point> list = (List<Point>)obj;
		Point point = null;
		StringBuilder sb = new StringBuilder().append("[");
		for (int i = 0; i < list.size(); i++) {
			point = list.get(i);
			sb.append(i+1).append(" x=").append(point.getX())
			.append(",y=").append(point.getY())
			.append(",z=").append(point.getZ());
		}
		sb.append(" ]").toString();
		//System.out.println(sb);
		return sb.toString();	
	}	
}

  


4.3 input.jsp頁面:
    
<s:textfield name="point" label="三維坐標(x,y,z)" />
<s:textfield name="point" label="三維坐標(x,y,z)" />
<s:textfield name="point" label="三維坐標(x,y,z)" />

  


4.4 使用局部的properties,TestAction-conversion.properties

point =com.test.converter.PointConverter




五、不使用轉換器進行轉換

5.1 使用對象類型的屬性:
    
	 private Point point;

  


5.2 修改input.jsp頁面,output頁面不變
    
<s:textfield name="point.x" label="x" />
<s:textfield name="point.y" label="y" />
<s:textfield name="point.z" label="z" />

  

5.3 在Point類中重寫toString方法
    
	public String toString(){
		StringBuilder sb = new StringBuilder()
		.append("[x=").append(x).append(",y=").append(y).append(",z=").append(z).append("]");
		return sb.toString();
	}

  


eg: struts2會通過反射去創建Point類(必須有空的構造方法),然后通過反射調用setter方法賦值;輸出頁面上會調用實例的toString方法

Struts2學習筆記2_轉換器的使用


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 综合网婷婷 | 国产999在线 | 黄黄视频在线观看 | 99久久99久久 | 中文字幕在线观看一区二区三区 | 99re热久久资源最新获取 | 久久剧场 | 欧美色域 | 亚洲精品久久久久中文 | 日韩精品一区二区三区免费观看 | 97av在线视频| 久久精品国产99久久99久久久 | 色综合色狠狠天天久久婷婷基地 | 中文字幕在线亚洲精品 | 99精品国产福利在线观看 | 超激情碰碰碰啪在线视频 | 久久国产精品免费一区二区三区 | 伊人色在线 | 久久一日本道色综合久久m 久久一色本道亚洲 | 国产精品欧美韩国日本久久 | 色综合久久综精品 | 特黄特级a级黄毛片免费观看多人 | 成人午夜性a一级毛片美女 成人午夜性视频欧美成人 成人午夜亚洲影视在线观看 | 成人免费毛片视频 | 久热最新视频 | 午夜精品久久久久久毛片 | 久热视线观看免费视频 | 国产福利精品在线观看 | 国产在线观看精品 | 伊人色综合网一区二区三区 | 成人夜夜 | 欧美日韩不卡中文字幕在线 | 在线精品国精品国产不卡 | 午夜香蕉成视频人网站高清版 | 99视频福利 | 亚洲精品久久久久久小说 | 国产69精品久久久久999小说 | 欧美亚洲网 | 非洲黑人xxxxxbbbbbb| 看一级特黄a大片日本片黑人 | 美女hdxxxx中国 |