struts2 类型转换学习总结

给出如下实例

1、编写输入表单 input.jsp,代码如下

 

<body>
<h2><font color="red">用逗号将两个点分开</font></h2>
<s:form action="pointConverter">
   <s:textfield name="point" label="point"></s:textfield>
   <s:textfield name="point" label="point2"></s:textfield>
   <s:textfield name="point" label="point3"></s:textfield>
   <s:textfield name="age" label="age"></s:textfield>
   <s:textfield name="username" label="username"></s:textfield>
   <s:textfield name="date" label="date"></s:textfield>
   <s:submit label="submit"></s:submit>
</s:form>
</body>

 其中age,username,date的类型转换,struts2可以为我们自动完成,而对于point的类型转换我们需要一些额外的操作,具体见如下几步。

2、编写pointer类,代码如下:

package com.test.bean;

public class Point {
	private int x;
	private int y;
	public int getX() {
		return x;
	}
	public void setX(int x) {
		this.x = x;
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		this.y = y;
	}
	
}

3、编写类pointer的action,代码如下:

package com.test.action;

import java.util.Date;
import java.util.List;

import com.opensymphony.xwork2.ActionSupport;
import com.test.bean.Point;

public class PointAction extends ActionSupport{
private List<Point> point;	
private int age;
private String username;
private Date date;
public int getAge() {
	return age;
}
public void setAge(int age) {
	this.age = age;
}
public String getUsername() {
	return username;
}
public void setUsername(String username) {
	this.username = username;
}
public Date getDate() {
	return date;
}
public void setDate(Date date) {
	this.date = date;
}
@Override
public String execute() throws Exception {
   return SUCCESS;
}
public List<Point> getPoint() {
	return point;
}
public void setPoint(List<Point> point) {
	this.point = point;
}
}

  4、配置struts.xml

 

  <action name="pointConverter" class="com.test.action.PointAction">
      <result name="success">/output.jsp</result>
      <result name="input">/input.jsp</result>
  </action>

 

5、编写output.jsp

   

point <s:property value="point"/><br>
age <s:property value="age"/><br>
username <s:property value="username"/><br>
date <s:property value="date"/><br>

6、编写转换器类PointConvert类

  

package com.test.converter;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

import com.test.bean.Point;

public class PointConvert extends StrutsTypeConverter{

	@Override
	public Object convertFromString(Map context, String[] values, Class toClass) {
		List<Point> point=new ArrayList<Point>();
	
		for(String str1:values)
		{
			String[] str=str1.split(",");
			int x=Integer.parseInt(str[0]);
			int y=Integer.parseInt(str[1]);
			Point pt=new Point();
			pt.setX(x);
		    pt.setY(y);
		    point.add(pt);
			
		}
		return point;
	}

	@Override
	public String convertToString(Map context, Object o) {
		List<Point> point=(List<Point>)o;
		StringBuilder buf=new StringBuilder();
		buf.append("[");
		int number=0;
		for(Point pt:point)
		{
			 ++number;
		     int x=pt.getX();
		     int y=pt.getY();
		     buf.append(number).append(".( x= ").append(x).append(" y= ").append(y).append(")");		
		}
       buf.append("]");
	    return buf.toString();
	}

	
}

 7、配置PointConvert类的映射,创建一个PointAction-conversion.properties的文件。

      

point=com.test.converter.PointConvert

 

   这种类型的是局部类型转换文件,也可以生成全局的,以本例而言可以命名为"xwork-conversion.properties",代码为:

com.test.bean.Point=com.test.converter.PointConverter

        可以根据需求自己来定

至此一个类型转换实例开发完毕。

8、总结

(1)struts2的类型转换流程是这样的,把提交表单的参数,如本例中的username,用户再提交表单后,根据struts2.xml文件中的配置,表单中的参数交给PointAciton中的XXset方法,XXset方法将非对象类型的数据隐式转换成目标类型,(注意从客户端传过来的都是String类型的数据),对于对象类型的数据,XXset方法首先找这样的文件,它的名字为”本action的类名-conversion.properties“,如果没有找到那就找名字为”xwork-conversion.properties“的文件,如果还仍未找到,那么调用对象类型的 toString方法,赋给本action的成员变量。

(2)类型转换要知道的类:DefaultTypeConverter,StrutsTypeConverter。

(3)类型转换优先于数据校验。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值