012——Struts2的自定义类型转换器

来源:互联网 发布:省市区编码 json数据 编辑:程序博客网 时间:2024/04/29 09:05

自定义类型转换器要继承StrutsTypeConverter抽象类,实现如下两个方法

(1)public Object converFromString(Map context, String[] values. Class toClass)实现字符串向对象的转换

  • context:转换上下文,可以在里面引用各种对象
  • values:用户输入的字符串
  • toClass:将要被转换成的对象类型
(2)public String convertToString(Map context, Object o)实现对象向字符串的转换
  • context:转换上下文
  • o:需要被转换的对象
示例:
struts.xml
<package name="main" extends="struts-default"><action name="convert" class="com.java.struts2.action.ConverterAction"><result name="success">/success.jsp</result></action></package>
ConvertAction
package com.java.struts2.action;import com.opensymphony.xwork2.ActionSupport;public class ConverterAction extends ActionSupport {private Rectangle rectangle;public Rectangle getRectangle() {return rectangle;}public void setRectangle(Rectangle rectangle) {this.rectangle = rectangle;}public String execute() throws Exception {return SUCCESS;}}
自定义转换器RectangleConverter
package com.java.struts2.action;import java.util.Map;import org.apache.struts2.util.StrutsTypeConverter;import com.opensymphony.xwork2.conversion.TypeConversionException;public class RectangleConverter extends StrutsTypeConverter {public Object convertFromString(Map context, String[] values, Class toClass) {//用户输入,比如16:25String userInput = values[0];String[] arr = userInput.split(":");//在真正的格式转换之前先把所有的用户输入可能的错误拦截if(arr.length != 2) {throw new TypeConversionException("请输入正确的长方形格式如:width:height");}try {Rectangle rectangle = new Rectangle();int width = Integer.parseInt(arr[0]);int height = Integer.parseInt(arr[1]);rectangle.setWidth(width);rectangle.setHeight(height);return rectangle;} catch (Exception e) {throw new TypeConversionException("请输入正确的长方形格式如:width:height", e);}}public String convertToString(Map context, Object o) {Rectangle rectangle = (Rectangle) o;return "长方形:宽" + rectangle.getWidth() + ",高" + rectangle.getHeight();}}
注册自定义类型转换器(src下创建)
xwork-conversion.properties(文件采用“全类名=|这个类对应的类型转换器全类名”)
com.java.struts2.action.Rectangle =com.java.struts2.action.RectangleConverter
表单:
<s:form action="/convert.action" method="post"><s:textfield name="rectangle" label="输入长和宽" /><s:submit value="提交" /></s:form>
成功输出页面:
<s:property value="rectangle"/>








0 0
原创粉丝点击