应用场景:输入界面/输出界面 与 对象/数据库不是一一对应的关系。或者格式不一样。
例如:

输入矩形面积,自动解析出长和宽。

输入身份证号,自动解析出生日或其它信息。

第一步:做转换器的类。 --- 继承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转换类。

六、测试

我们只输入姓名和身份证号码两条信息,让转换器帮我们解析出生日

提交后跳转页面,转换器自动帮我们解析出生日