struts2学习笔记2

 

Sturts2学习笔记

二、类型转换

在用户输入过程中,一定会输入各种不同的类型,这就需要我们对数据进行一些必要的类型转换。


1、新建一个input.jsp

<%@ page language="java" pageEncoding="utf-8"%>

<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>类型转化</title>

</head>

<body>

<h3><font color="red">坐标用逗号分隔开</font></h3>

<s:form action="typeConver">

<s:textfield name="point" label="坐标"></s:textfield>

<s:textfield name="age" label="年龄"></s:textfield>

<s:textfield name="name" label="昵称"></s:textfield>

<s:textfield name="graduation" label="毕业日期"></s:textfield>

<s:submit label="提交"></s:submit>

</s:form>

</body>

</html>

2、先处理坐标这个特殊的类型

先新建一个javabean保存坐标的两个值



package com.song.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;

}

}



当然,我们可以自定义处理方式,这里使用struts2所提供的处理API

3、新建一个java类继承与DefaultTypeConverter

PointConvert.java



package com.song.convert;


import java.util.Map;


import ognl.DefaultTypeConverter;


public class PointConvert extends DefaultTypeConverter {


@Override

public Object convertValue(Map context, Object value, Class toType) {

// TODO Auto-generated method stub

return super.convertValue(context, value, toType);

}

}

convertValue()这个方法是用于转化类型的;其中 context这个是上下文,这里暂时没有用,Object value是从客户端传过来的值,Class toType是要转化的类型,既目标类型

4、现在实现convertValue()方法


package com.song.convert;


import java.util.Map;


import ognl.DefaultTypeConverter;


import com.song.bean.Point;


public class PointConvert extends DefaultTypeConverter {


@Override

public Object convertValue(Map context, Object value, Class toType) {


if(Point.class==toType)//从客户端向服务器端提交

{

Point point = new Point();

//value是一个数组类型

String [] str = (String[])value;

//value为什么是数组类型呢?这是因为再表单中可以有相同的name,这样通过name得到的返回值就是数组形式

String [] points = str[0].split(",");

int x = Integer.parseInt(points[0]);

int y = Integer.parseInt(points[1]);

point.setX(x);

point.setY(y);

return point;

}

if(String.class==toType)//从服务器端向客户端提交

{

Point point = (Point)value;

int x = point.getX();

int y = point.getY();

String result = "[x=" + x + ",y=" + y + "]";

return result;

}

return null;

}

}


5、写好了类型转化类。可是如何让程序知道改转化类的存在呢?这需要写一个properties文件来告诉程序该转化类的存在与功能。

这个properties文件的写法有一定的要求

1)、改文件要和与jsp相对应的action类在同一包下

2)、文件的名为 action类的名+”-conversion.properties”

3)、文件的内容为

需要转化的属性=转化改属性的类

文件名: PointAction-conversion.properties

文件内容: point=com.song.convert.PointConvert


6、配置struts.xml文件


<action name="typeConver" class="com.song.action.PointAction">

<result name="success">/output.jsp</result>

</action>


7、将内容输出至output.jsp


<%@ page language="java" pageEncoding="utf-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>类型转化</title>

</head>

<body>

坐标:<s:property value="point"/><br>

年龄:<s:property value="age"/><br>

昵称:<s:property value="name"/><br>

毕业时间:<s:property value="graduation"/>

</body>

</html>


<s:property value=””/>这个标签对应的表单中的get()方法


好!现在运行一下程序看看!


上面是的转化称之为局部类型转化,服务于特定的类型,如果一个程序中有多个同样的类型需要转化,那么就需要配置全局类型转化。


8、全局类型转化只需修改配置文件即可

1)、文件名固定 xwork-conversion.properties


2)、目录与web.xml文件再同一目录下

3)、内容为:需要转化的类型所在包=用于转化的类

com.song.bean.Point=com.song.convert. PointConvert


这样便实现了全局类型转化!


9、再struts2中有一个类继承了DefaultTypeConverter,它使类型转化更加方便


新建一个类PointConvert2使其继承StrutsTypeConverter


package com.song.convert;


import java.util.Map;


import org.apache.struts2.util.StrutsTypeConverter;


import com.song.bean.Point;


public class PointConvert2 extends StrutsTypeConverter {


@Override

public Object convertFromString(Map arg0, String[] value, Class arg2) {

//从客户端传来的

Point point = new Point();

String[] points = value[0].split(",");

int x = Integer.parseInt(points[0]);

int y = Integer.parseInt(points[1]);

point.setX(x);

point.setY(y);

return point;

}


@Override

public String convertToString(Map arg0, Object arg1) {

//传向客户端的

Point point = (Point)arg1;

int x = point.getX();

int y = point.getY();

StringBuffer sb = new StringBuffer();

sb.append("[[x=").append(x).append(", y =").append(y).append("]");

return sb.toString();

}


}

写到这里,只需要修改一下转化类的配置文件就可以了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值