=======================================
1. input.jsp
用逗号将点的两个坐标分割开
如:20,30对于一个属性来说,先进行类型转化,转化成功了再进行输入验证
=======================================
2.建立 模型类
private int y;
//setter...getter...方法
}
=======================================
3.简要说明
主要使用DefaultTypeCenverter类
重写convertValue()方法
=======================================
4.建立自定义转换类
建立 转换类
需要继承DeaultTypeConverter,DeaultTypeConverter实现了TypeConverter转换接口
public class PointConverter extends DeaultTypeConverter {
public Object convertValue(
Map context, //上下文
Object value, //要转换的值(String数组)
Class toType //目标类型(转换成什么)
) {
//如果要转换的类型是Point
if( Point.class == toType ) {
Point point = new Point();
String[] str = (String[])value;
//此处数组只有一个值,在0的位置上
String[] paramValues = str[0].split(",");
int y = Integer.parseInt(paramValues[1]);
point.setY(y);
if( String.class == toType ) {
Point point = (Point)value;
int x = point.getX();
int y = poitn.getY();
String result = "[x=" + x + " , y=" + y + "]";
}
注:为什么value是数组,因为页面的字段可以有同样的名字,如:
这样的话,获得username时就应该是多个,所以是字符串数组
5.建立action
private Point point;
private int age;
private String username;
private Date date;
public String execute() throws Execption {
}
}
补充:
Action接口中:
Field Summary 字段摘要
INPUT 验证没有成功
LOGIN 没有执行成功,因为没有登陆
NONE 执行成功,但不相识任何题图
SUCCESS 执行成功
=======================================
6. struts.xml
=======================================
7.output.jsp
point:
age:
username:
date:
${point }
${point.x }
${point.y }
=======================================
8.定义属性文件--用于指定转换类
-conversion.properties: 是固定不变的
point=com....converter.PointConverter
【完成】
整体流程
如果发现已经定义好了类型转换(检查PiontAction的目录下有没有PointAction-onversion.properties存在),然后到该.properties文件里找,你到底要通过哪个类转换哪一个属性。
Poitn.class==toType:通过字符串数组 转换到 Point对象,进入到相应的if流程
return后,流程回到PointAction中的setPoint方法,然后使用转换后的对象赋值给属性
=======================================
多个属性的局部类型转换
添加两个点的坐标
添加两个点字段
private Point point2;
private Point point3;
//setter...getter...
PointAction-conversion.properties中
添加
point2=com........converter.PointConverter
point3=com........converter.PointConverter
result.jsp中
添加
点2:
点3:
配置文件:
应在classes目录下,也就是struts.xml相同的目录
放在src下就可以了
=======================================
1. 建立一个新的转换类,继承StrutsTypeConverter
@Override
public Object convertFromString(
Map context,
String[] values,
Class toClass) {
String[] paramValues = values[0].split(",");
int x = Integer.parseInt(paramValues[0]);
int y = Integer.parseInt(paramValues[1]);
point.setX(x);
point.setY(y);
return point;
}
@Override
public String convertToString( Map context, Object o ) {
Point point = (Point)o;
int x = point.getX();
int y = point.getY();
String result = "[x=" + x + ", y=" + "]";
}
2.修改配置文件 xwork-conversion.properties
【完成】
=======================================
1.action类
private int age;
private String username;
private Date date;
}
2.input.jsp
=======================================
3. result.jsp
age:
username:
date:
4.转换类 PointConverter3
@Override
public Object convertFromString(
Map context,
String[] values,
Class toClass) {
Point point = new Point();
String[] paramValues = value.split.split(",");
int x = Integer.parseInt(paramValues[0]);
int y = Integer.parseInt(paramValues[1]);
point.setY(y);
}
return list;
}
@Override
public String convertToString( Map context, Object o ) {
List
//StringBuilder 非同步版本的StringBuffer
StringBuilder sb = new StringBuilder();
sb.append("[");
int number = 0;
for( Point point : list ) {
++number;
int x = point.getX();
int y = point.getY();
}
sb.append("]");
return sb.toString();
}
5.采用局部转换
【完成】
注:
补充:
------------------------
public class PointAction extends ActionSupport {
private int age;
private String username;
private Date date;
}
将全局和局部类型转换注释掉 用#号
重写Point的toString()
pubic String toString() {
return "[x=" + x + ", y=" + y + "]";
}
更改jsp默认的字符集
菜单window->Preferences->MyEclipse->FIles and Editors->JSP
从Encoding中选择需要的 比如UTF-8