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

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條評論
主站蜘蛛池模板: 久久er国产精品免费观看8 | 99久久精品国产免费 | 久久99热精品免费观看欧美 | 亚洲午夜久久久精品影院视色 | 久久综合九色综合77 | 色黄网站青青草原免费 | 99国产精品 | 亚洲免费在线 | 天天摸夜夜摸爽爽狠狠婷婷97 | 狠狠色伊人亚洲综合成人 | jizz美女18 | 狠狠干影视 | 久久综合综合 | 成年女人a毛片免费视频 | 99热久久国产精品免费看 | 亚洲高清中文字幕 | 特级做人爱c级特级aav毛片 | 色综合久久一本首久久 | 深插视频 | 国产欧美成人免费观看视频 | 亚洲视频免费在线看 | 色综合中文字幕在线亚洲 | 久久99一区| 四虎永久免费观看 | 久久99精品久久久久久首页 | 国产精品自拍亚洲 | 狠狠干奇米 | 久久精品99毛片免费 | 99亚洲精品 | 夜夜狠狠狠狠 | 国产精品嫩草研究所永久网址 | 天天射天天干天天舔 | 久热这里只有精品在线 | 国产午夜亚洲精品久久999 | 午夜欧美性视频在线播放 | 激情亚洲婷婷 | 99婷婷 | 成人免费淫片免费观看 | 黄色网在线 | 视频在线一区二区三区 | 欧美一区日韩一区中文字幕页 |