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

Struts2學(xué)習(xí)筆記2_轉(zhuǎn)換器的使用

系統(tǒng) 1750 0
一、轉(zhuǎn)換自定義類的基本方法

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;    //整數(shù)
	private Float floatNumber;	//小數(shù)
	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>轉(zhuǎn)換器的使用</h3>
<s:form action="test" method="post">
   	<s:textfield name="intNumber" label="整數(shù)" />
   	<s:textfield name="floatNumber" label="浮點數(shù)" />
   	<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>轉(zhuǎn)換后的結(jié)果</h3>
整數(shù):<s:property value="intNumber" /><br>
浮點數(shù):<s:property value="floatNumber" /><br>
時間:<s:property value="date" /><br>
三維點:<s:property value="point" /><br>
矩形:<s:property value="rectangle" />

  

省略標簽的導(dǎo)入

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

2.1 新建轉(zhuǎn)換器,繼承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數(shù)字
			String[] params = strs[0].split(",");  //假設(shè)規(guī)定以,分隔坐標
			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數(shù)組
			String[] params = strs[0].split(",");	//假設(shè)規(guī)定以,分隔高和寬
			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如何調(diào)用我們的轉(zhuǎn)換器?
在Action的同目錄下建立對應(yīng)的XxxxAction-conversion.properties? XxxxAction的名字對應(yīng)Action類的名字 ,比如這里為 TestAction-conversion.properties:

#對屬性進行轉(zhuǎn)換注冊(其實是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中又有很多需要進行轉(zhuǎn)換的類,豈不是要寫很多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 (使用 #),運行效果一樣

三、轉(zhuǎn)換器繼承StrutsTypeConverter

3.1 放棄convertValue方法

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


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

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

  


4.2 轉(zhuǎn)換器中:
    
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




五、不使用轉(zhuǎn)換器進行轉(zhuǎn)換

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會通過反射去創(chuàng)建Point類(必須有空的構(gòu)造方法),然后通過反射調(diào)用setter方法賦值;輸出頁面上會調(diào)用實例的toString方法

Struts2學(xué)習(xí)筆記2_轉(zhuǎn)換器的使用


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲精品美女一区二区三区乱码 | 亚洲欧美日韩中文v在线 | 国产在线毛片 | 综合黄色| 看福利影院 | 色视频国产| 国产成人久久 | 亚洲伦理中文字幕一区 | 国产成人久久精品推最新 | 九九热视频免费在线观看 | 日本人一级毛片免费完整视频 | 久久乱码精品区中文字幕 | 欧美中文在线 | 欧美特级毛片aaaa | 成人不卡视频 | 久久亚洲国产欧洲精品一 | 伦伦影院精品一区 | 视频在线观看一区 | 最新狠狠色狠狠色综合 | 国产成人免费不卡在线观看 | 国产高清ujzzujzz | 日本中文字幕网站 | 久久99精品久久久久久三级 | 九九影片重口味 | 欧美精品v欧洲精品 | 久久国内精品视频 | 青青青免费手机版视频在线观看 | 视频一区色眯眯视频在线 | 久久国产精品99精品国产987 | 最新精品亚洲成a人在线观看 | 日本一区二区三区高清福利视频 | 国产高清精品自在久久 | 欧美日韩第二页 | 伊人久久在线 | 老司机亚洲精品影视www | 久久精品国产亚洲精品 | 成年人免费在线视频 | 农村女人十八毛片a级毛片 农村三级孕妇视频在线 | 精品中文字幕不卡在线视频 | 久视频在线| 国产精品久久久久久久免费 |