类型转换器

来源:互联网 发布:雨水管径计算软件 编辑:程序博客网 时间:2024/04/27 16:59

分为两种:局部和全局类型转换器

局部:仅仅对某个action的属性起作用。文件格式:ActionName-conversion.properties。文件内容:propertyname=完整的类型转换器类名。

            如:LoginAction-conversion.properties.             内容:user=包名.UserConverter                    (此处的user是类User的属性,如private User user;)

全局:对所有action的特定类型属性都会有效。 文件格式:xwork-conversion.properties(固定不变)。 文件内容:复合类型完整名=对应的完整的类型转换器类名。

           如:xwork-conversion.properties.                         内容:包名.User=包名.UserConverter

注:局部类型转换器的properties文件只能与其对应的Action类在同一个目录下即同一个包下。

       全局类型转换器的properties文件只能位于src下即与struts.xml在同一个目录下。供所有action所用。

 

实例:

package test;

import com.opensymphony.xwork2.Action;

import dao.Telphone;
import dao.User;

public class Testuser implements Action {

 private User user;                //User类型属性封装请求参数
 private Telphone telphone;
 
 public Telphone getTelphone() {
  return telphone;
 }

 public void setTelphone(Telphone telphone) {
  this.telphone = telphone;
 }

 private String indicate;
 
 public User getUser() {
  return user;
 }

 public void setUser(User user) {
  this.user = user;
 }

 public String getIndicate() {
  return indicate;
 }

 public void setIndicate(String indicate) {
  this.indicate = indicate;
 }

 public String execute() throws Exception {
  //通过user属性的username属性和password属性来决定转向
  if(getUser().getUsername().equals("guangming") &&getUser().getPassword().equals("admin"))
  {
   setIndicate("转换成功");
   return SUCCESS;
  }
  setIndicate("转换失败");
  return "error";
 }

}

 

//以下是类型转换器

package test;

import java.util.Map;

import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;

import dao.Telphone;
import dao.User;

public class UserConverter extends DefaultTypeConverter
{

 //重写convertValue方法,该方法需要完成双向转换
 @Override
 public Object convertValue(Map<String, Object> context, Object value,
   Class toType) {
  if(toType==User.class)          //将字符串向复合类型转换
  {
   String[] params=(String[])value;     //系统的请求参数是一个字符串数组
   User user=new User();
   String[] uservalues=params[0].split(",");   //处理请求参数数组第一个数组元素,并将字符串分割开
   user.setUsername(uservalues[0]);
   user.setPassword(uservalues[1]);
   return user;                            //返回转换来的实例
  }
  else if(toType==String.class)               //将复合类型转换为字符串
  {
   User user=(User)value;                  //将需要转换的值强制转换为User实例
   return user.getUsername()+","+user.getPassword();
  }
  else if(toType==Telphone.class)
  {
   String[] params=(String[])value;
   Telphone telphone=new Telphone();
   String[] telvalues=params[0].split("-");
   telphone.setSection(telvalues[0]);
   telphone.setPhone(telvalues[1]);
   return telphone;
  }
  else if(toType==String.class)
  {
   Telphone telphone=(Telphone)value;
   return telphone.getSection()+"-"+telphone.getPhone();
  }
  return null;
 }
 
}

 

原创粉丝点击