Struts2学习笔记2-类型转换

第一种:使用DefaultTypeConverter转换
JSP页面
<s:textfield name="point" label="point"></s:textfield>
<s:textfield name="age" label="ages"></s:textfield>
<s:textfield name="username" label="usernames"></s:textfield>
<s:textfield name="date" label="birthdays"></s:textfield>

提交到相应的Action之后会读取和Action同目录的文件
ConverterAction-conversion.properties
point=com.langhua.converter.PointConverter

这样就会找到这个转换器
package com.langhua.converter;

import java.util.Map;

import com.langhua.bean.Point;

import ognl.DefaultTypeConverter;

public class PointConverter extends DefaultTypeConverter {

	@Override
	public Object convertValue(Map context, Object value, Class toType) {
		//从页面转到服务器 toType表示要转化的类型
		if(Point.class == toType){
			//有可能收集的是数组所以是个String的数组
			String[] values = (String[]) value;
			String[] args = values[0].split(",");
			Point point = new Point();
			point.setX(Integer.parseInt(args[0]));
			point.setY(Integer.parseInt(args[1]));
			return point;
		}
		//从服务器转到页面
		if(String.class == toType){
			Point p = (Point) value;
			return "["+p.getX()+","+p.getY()+"]";
		}
		return null;
	}
	
}

调用里面的方法
然后跳转到相应的页面再调用里面的方法
<action name="pointconverter" class="com.langhua.action.ConverterAction">
			<result name="success">/output.jsp</result>
	</action>

最后在页面输出
	point:<s:property value="point"/><br/>  
   	age:<s:property value="age"/><br/>
   	username:<s:property value="username"/><br/>
   	brithday:<s:property value="date"/><br/>

第二种,全局转换
和struts.xml同目录下面加入这样一个文件
xwork-conversion.properties
里面指定
com.langhua.bean.Point=com.langhua.converter.PointConverter1

这样只要遇到Point类,就会使用后面的转换器转换

第三种使用struts2提供的类StrutsTypeConverter extends DefaultTypeConverter来转换
如下
package com.langhua.converter;

import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

import com.langhua.bean.Point;

public class PointConverter1 extends StrutsTypeConverter {

	@Override
	public Object convertFromString(Map context, String[] values, Class toClass) {
		Point p = new Point();
		String[] parms = values[0].split(",");
		p.setX(Integer.parseInt(parms[0]));
		p.setY(Integer.parseInt(parms[1]));		
		return p;
	}

	@Override
	public String convertToString(Map context, Object o) {
		Point p = (Point)o;
		return p.toString();
	}

}


第四种可以在页面写成这样
<s:textfield name="point.x" label="x"></s:textfield>
		<s:textfield name="point.y" label="y"></s:textfield>

这样的话就不要什么配置文件了

你可能感兴趣的:(java,bean,jsp,xml,struts)