应用场景:输入界面/输出界面 与 对象/数据库不是一一对应的关系。或者格式不一样。
例如:
输入矩形面积,自动解析出长和宽。
输入身份证号,自动解析出生日或其它信息。
第一步:做转换器的类。 --- 继承StrutsTypeConverter
第二步:配置
第一种全局配置:在src根下,建立xwork-conversion.properties文件。配置好实体类与转换类的二者完全限定名对应关系。
文件名不能错。
打开点击add
name是实体类的完全限定名,value是转换类的完全限定名。
这样全局配置就完成了,转换器就可以使用了。
第二种局部配置:在action包里面建Action类名-conversion.properties文件(如:StudentAction-conversion.properties),配置好成员变量与转换类的对应关系。
name:stu是action中的成员变量,value:com.itnba.maya.util.StudentConverter是转换类的完全限定名。
这样局部配置就完成了,这一个action就可以使用转换器了。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
例:输入身份证号,自动解析生日
一、在model层建一个Student的实体类,并生成get,set
package com.itnba.maya.model; public class Student { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getIdNumber() { return idNumber; } public void setIdNumber(String idNumber) { this.idNumber = idNumber; } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } private String idNumber; private String birthday; }
二、在控制场写一个StudentAction类,
package com.itnba.maya.controller; import com.itnba.maya.model.Student; import com.opensymphony.xwork2.ActionSupport; public class StudentAction extends ActionSupport { private Student stu; public Student getStu() { return stu; } public void setStu(Student stu) { this.stu = stu; } public String input(){ return SUCCESS; } public String show(){ return SUCCESS; } }
三、在web-content中建一个Student的文件夹,然后建两个方法对应的jsp
四、写一个继承自StrutsTypeConverter的Student转换类,重写里面的convertFromString方法
package com.itnba.maya.util; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; import com.itnba.maya.model.Student; public class StudentConverter extends StrutsTypeConverter { @Override public Object convertFromString(Map arg0, String[] arg1, Class arg2) { String s = arg1[0]; //输入的身份证号码 370303199411246014 String year = s.substring(6, 10); //截取年份7-10位 String month = s.substring(10, 12);//截取月份11,12位 String date = s.substring(12, 14);//截取日13,14位 Student stu = new Student(); stu.setBirthday(year+"-"+month+"-"+date);//把截取的年月日进行拼接,放到Birthday里面去 stu.setIdNumber(s);//把之前取到的身份证号再放到IdNumber中 return stu; } @Override public String convertToString(Map arg0, Object arg1) { // TODO 自动生成的方法存根 return null; } }
五、在src文件夹下建一个xwork-conversion.properties的配置文件,配置好实体类和转换类的关系,name实体类,value转换类。
六、测试
我们只输入姓名和身份证号码两条信息,让转换器帮我们解析出生日
提交后跳转页面,转换器自动帮我们解析出生日