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