Struts2 转换器

转换器

应用场景:输出界面/输出界面 与 对象/数据库不是一一对应的关系。或者格式不一样。
例如:输入身份证号,自动解析出生日或其它信息。

要实现一个拦截器总共需要做以下几步:

1.:做转换器的类。 --- 继承StrutsTypeConverter.

2.:配置。

第一种:全局配置。在src根下,建立xwork-conversion.properties文件。配置好实体类与转换类的二者完全限定名对应关系。(指定当遇到那一个实体类,就找到相应的转换类)
第二种:局部配置。在action的包里面,建立Action类名-conversion.properties文件(StudentAction-conversion.properties)。
配置好成员变量与转换类的对应关系。stu=com.itnba.maya.util.StudentConverter。(指定当遇到这个对象时,就找到相应的转换类)

(2者选其一即可)

示例:

实体类

package com.maya.convert;

public class User {
    private String name;
    private String card;
    private String birthday;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCard() {
        return card;
    }
    public void setCard(String card) {
        this.card = card;
    }
    public String getBirthday() {
        return birthday;
    }
    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }    
}

struts.xml配置

<package name="convert" namespace="/convert" extends="struts-default">       
        <action name="*_*" class="com.maya.convert.{1}Action" method="{2}">
            <result>{1}_{2}.jsp</result>
        </action>  
        <action name="Convert_insert" class="com.maya.convert.ConvertAction" method="insert">
            <result type="chain">Convert_findAll</result>
        </action>
</package>

ActionSupport

package com.maya.convert;

import com.opensymphony.xwork2.ActionSupport;

public class ConvertAction extends ActionSupport {
    private User user;    
    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public String add(){
        return SUCCESS;
    }
    
    public String insert(){
        return SUCCESS;
    }
    
    public String findAll(){
        return SUCCESS;
    }
}

JSP页面

转换器的类

package com.maya.convert;

import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

public class UserConvert extends StrutsTypeConverter {

    //对应题目,我们是要解析用户输入的身份证号,所以用convertFromString()这个个方法就可以了
    @Override
    public Object convertFromString(Map arg0, String[] arg1, Class arg2) {//一般我们只用中间的String[]
        // 将接收到的字符串转换成对象输出出去(页面向数据库进行操作,但与数据库不匹配时)
        String s=arg1[0];
        String year=s.substring(6, 10);
        String mounth=s.substring(10,12);
        String day=s.substring(12,14);
        
        User user=new User();
        user.setCard(s);
        user.setBirthday(year+"年"+mounth+"月"+day+"日");
        return user;
    }

    @Override
    public String convertToString(Map arg0, Object arg1) {//一般只用Object
        // 将接收到的对象已字符串的形式输出出去(数据库月页面显示不匹配时)
        return null;
    }    
}

全局配置:

com.maya.convert.User=com.maya.convert.UserConvert

局部配置:

user=com.maya.convert.UserConvert
原文地址:https://www.cnblogs.com/AnswerTheQuestion/p/6582562.html