struts2自定义类型转换

xiaoxiao2021-02-28  128

虽然struts2提供了很多自带的类型转换器,但是在实际开发中,这些转换器可能不够用,然后需要程序员开发一些类型转换器。这里我们通常开发类型转换器继承了org.apache.struts2.util.StrutsTypeConverter类,org.apache.struts2.util.StrutsTypeConverter的父类是com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter,com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter的父类是com.opensymphony.xwork2.conversion.TypeConverter。

org.apache.struts2.util.StrutsTypeConverter中要实现的方法: public Object convertFromString(Map arg0, String[] arg1, Class arg2); 本方法将字符串数组转换成复合类型,arg0表示action上下文的map对象,arg1表示要转换的字符串数组,arg2表示要转换的目标类型。 public String convertToString(Map arg0, Object arg1); 本方法将复合类型转换成字符串类型,arg0表示action的上下文对象,arg1表示要转换的对象。

示例代码:

类型转换器UserInfoConverter.java:

package com.web.typeconverter; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; import com.web.entity.UserInfo; /* * 关于自定义类型转换器: * 此处是一次只添加一个商品,如果要添加多个商品,对它们进行类型转换,就可以使用UserInfo的数组了, * 可以使用循环逐一转换类型 * */ public class UserInfoConverter extends StrutsTypeConverter { // 将字符串数组转换成复合类型 public Object convertFromString(Map arg0, String[] arg1, Class arg2) { // 实例化UserInfo类 UserInfo user = new UserInfo(); /* * 将传递过来的字符串以“/”分开存入数组proValues中, 如:传过来的是“meng/123/21/1995-06-14” * 转换到proValues中的是:String[] proValues={"meng","123","21","1995-06-14"}; */ System.out.println(arg1[0]); String[] proValues = arg1[0].split("/"); // 将拆分后的字符串数组设置进实体类中 user.setUname(proValues[0]); user.setUpass(proValues[1]); user.setAge(Integer.parseInt(proValues[2])); return user; } // 将复合类型转换成字符串类型 public String convertToString(Map arg0, Object arg1) { UserInfo user = (UserInfo) arg1; return ""; } } action类:UserInfoConverterAction.java:

package com.web.action; import com.opensymphony.xwork2.ActionSupport; import com.web.entity.UserInfo; @SuppressWarnings("serial") public class UserInfoConverterAction extends ActionSupport { private UserInfo user1; private UserInfo user2; public String converterTest() { return SUCCESS; } public UserInfo getUser1() { return user1; } public void setUser1(UserInfo user1) { this.user1 = user1; } public UserInfo getUser2() { return user2; } public void setUser2(UserInfo user2) { this.user2 = user2; } } 添加用户界面:index.jsp:

<h2>添加用户</h2> <s:form action="UserInfoConverterAction!converterTest.action" method="post"> <s:textfield name="user1" label="用户一" size="50"></s:textfield> <s:textfield name="user2" label="用户二" size="50"></s:textfield> <s:submit value="确认添加"></s:submit> </s:form> 显示用户界面:success.jsp:

<h2>添加成功显示用户</h2> <table border="1" cellpadding="0" cellspacing="0" width="30%"> <tr> <td>姓名</td> <td>密码</td> <td>年龄</td> </tr> <tr> <td><s:property value="user1.uname"/></td> <td><s:property value="user1.upass"/></td> <td><s:property value="user1.age"/></td> </tr> <tr> <td><s:property value="user2.uname"/></td> <td><s:property value="user2.upass"/></td> <td><s:property value="user2.age"/></td> </tr> </table> 配置类型转换器:xwork-conversion.properties:

com.web.entity.UserInfo=com.web.typeconverter.UserInfoConverter

关于类型转换器的配置问题: 注意:如果配置全局类型转换器可以直接在src目录下添加配置文件,如果配置特定类的类型转换器,需要在该类的包下添加配置文件。

测试界面:

转载请注明原文地址: https://www.6miu.com/read-39785.html

最新回复(0)