首先定义一个前端的页面,用于向后台进行参数的传递,同时为了完成参数的转换,我们需要自定义参数转换器
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.<a href="https://beatree.cn/tag/struts" title="查看更多关于 struts 的文章" target="_blank">struts</a>2.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
项目结构如下图