Struts2.x 中自定义转换器 extends DefaultTypeConverter

作者 做棵大树 日期 2018-05-08
Struts2.x 中自定义转换器 extends DefaultTypeConverter

首先定义一个前端的页面,用于向后台进行参数的传递,同时为了完成参数的转换,我们需要自定义参数转换器

index.jsp

<center> <s:debug></s:debug> <s:form action="ColorChanger" method="post"> <s:textfield name="color" label="请输入形式如 “100,100,100”的内容" ></s:textfield> <s:submit value="点击提交" ></s:submit> </s:form> </center>

ColorConverter.java

public class ColorConverter extends DefaultTypeConverter {

@SuppressWarnings("unchecked")
@Override
public Object convertValue(Map context, Object value, Class toType) {
    if (toType == String.class) {
        // 系统的请求参数是一个字符串数组
        String\[\] params = (String\[\])value;
        //获取字符串数组中的第一个字符串,进行相关的分离
        String\[\] rgb = params\[0\].split(",");
        //定义最终返回的字符串
        String color = "#";

        for (int i = 0; i < rgb.length; i++) {
            //获取转化后的参数,并转化为int类型
            int a = Integer.parseInt(rgb\[i\]);
            if (a<=255 && a>=0) {    //判断是否合法
                //将10进制通过调用Integer.toHexString函数转化为16进制
                color += Integer.toHexString(a);
            }else{
                color="输入数据类型有误!";
                break;
            }
        }
        context.put("color", color);
        return color.toString();
    }
    return super.convertValue(context, value, toType);
}

}

ColorChangerAction.java

package zzu.xzy.action;

import javax.servlet.ServletContext;

import org.apache.struts2.util.ServletContextAware;

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings(“serial”)
public class ColorChangerAction extends ActionSupport implements ServletContextAware{

private String color;
ServletContext application = getApplication();

//生成color的set和get方法
public String getColor() {
    return color;
}
public void setColor(String color) {
    this.color = color;
}

public ServletContext getApplication() {
    return application;
}
public void setApplication(ServletContext application) {
    this.application = application;
}

@Override
public void setServletContext(ServletContext application) {
    this.application = application;
}

@Override
public String execute() throws Exception {
    application.setAttribute("lastColor", color);
    return SUCCESS;
}

}

以上代码文件中,index.jsp 用于对前台显示和参数的获取,ColorConverter.java 文件用于捕捉到前台传递的参数并进行相关的自定义的转换,而后将相关的参数送到 action 中进行处理。

注意:在action的返回值中,应当 返回 INPUT 的值

为了让编写的类型转换器生效,我们要编写一个类型转换文件ActionName-conversion.properties,指明action中要转换类型的参数名称,以及对应调用的类型转换器名称,把它放在对应Action所在包下。ActionName是指action的类名,因此我的类型转换文件命名为:

ColorChangerAction-conversion.properties

color=zzu.xzy.converter.ColorConverter

项目结构如下图