当前位置: 首页 > 图文教程 > Java技术 > Web框架 > Web框架:小议struts2类型转换

Web框架
Web框架:addOptions and removeAllOptions
Web框架:Xfire与Spring集成那些事
Web框架:多个dwr.xml配置方法
Web框架:小编整理Hibernate 基本查詢
Web框架:DWR使用中的web.xml配置
Web框架:Struts2使用Spring插件完成整合
Web框架:小编叙Spring的事务管理
Web框架:Struts2国际化实现用户自行选择语言
Web框架:Struts2中加载资源文件的方式
Web框架:Struts2中整合图表工具JFreeChart的时间顺序图
Web框架:浅谈Struts2的内建校验器
Web框架:FreeMarker中的escape , noescape指令
Struts2的Visitor校验器
Struts2中的subset标签使用方法浅谈
Hibernate核心接口那些事
Spring中的依赖注入
Spring中的Inversion of Control 容器
浅析Spring中的单元测试
用StrutsTestCase测试Struts应用程序
浅谈Struts中html:options的使用

Web框架:小议struts2类型转换


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 170 ::
收藏到网摘: n/a

今天,小编拿出珍藏已久的文章来和大家共享,说到Struts2类型转换大家也许能够耳熟能详,但是对于不知道原理,只会用的朋友们不妨看看这篇文章,会对你有帮助的。

1,使用struts2内建的OGNL表达式。如下例如示:

 

struts2页面如下:

 

<%@ page language="java" contentType="text/html; charset=GBK"%>

<html>

<head>

<title>直接封装成Object</title>

</head>

<body>

<form action="login.action" method="post">

    <table align="center" width="360">

    <caption><h3>直接封装成Object</h3></caption>

        <tr>

            <td>用户名:<input type="text" name="user.name"/></td>

        </tr>

        <tr>

            <td>&nbsp;&nbsp;码:<input type="text" name="user.pass"/></td>

        </tr>

        <tr align="center">

            <td><input type="submit" value="转换"/><input type="reset" value="重填" /></td>

        </tr>

    </table>

</form>

</body>

</html>

 

Action中的操作如下:

 

public class LoginAction implements Action

{

private User user;

private String tip;

 

public void setUser(User user)

{

   this.user = user;

}

 

public void setTip(String tip)

{

   this.tip = tip;

}

 

public User getUser()

{

   return (this.user);

}

 

public String getTip()

{

   return (this.tip);

}

 

    public String execute() throws Exception

{

        if (getUser().getName().equals("scott")

    && getUser().getPass().equals("tiger") )

   {

    setTip("转换成功");

            return SUCCESS;

        }

   else

   {

    setTip("转换失败");

            return ERROR;

        }

    }

}

 

使用方法1我们还可以直接生成Collection或者Map实例。如下例:

 

页面代码如下:

 

<%@ page language="java" contentType="text/html; charset=GBK"%>

<html>

<head>

<title>直接封装成Map</title>

</head>

<body>

<form action="login.action" method="post">

    <table align="center" width="360">

    <caption><h3>直接封装成Map</h3></caption>

        <tr>

            <td>第一个用户名:<input type="text" name="users['one'].name"/></td>

        </tr>

        <tr>

            <td>第一个密码:<input type="text" name="users['one'].pass"/></td>

        </tr>

        <tr>

            <td>第二个用户名:<input type="text" name="users['two'].name"/></td>

        </tr>

        <tr>

            <td>第二个密码:<input type="text" name="users['two'].pass"/></td>

        </tr>

        <tr align="center">

            <td><input type="submit" value="转换"/><input type="reset" value="重填" /></td>

        </tr>

    </table>

</form>

</body>

</html>

 

Action代码如下:

 

public class LoginAction implements Action

{

private Map<String ,User> users;

private String tip;

 

public void setUsers(Map<String ,User> users)

{

   this.users = users;

}

 

public void setTip(String tip)

{

   this.tip = tip;

}

 

public Map<String ,User> getUsers()

{

   return (this.users);

}

 

public String getTip()

{

   return (this.tip);

}

 

    public String execute() throws Exception

{

   System.out.println(getUsers());

        if (getUsers().get("one").getName().equals("scott")

    && getUsers().get("one").getPass().equals("tiger") )

   {

    setTip("转换成功");

            return SUCCESS;

        }

   else

   {

    setTip("转换失败");

            return ERROR;

        }

    }

}

 

除了以上在Action中使用泛型来保证赋值的正确性的方法外,还可以通过Struts2的标签来赋值。即通过指定集合元素的类型或者指定集合元素的索引属性来赋值。

 

2,使用类型转换器,

 

     struts2提供了一个StrutsTypeConverter抽象类,这个抽象类是DefaultTypeConverter类的子类,实现该方法时,只需要将它的两个不同转换方向替换成不同方法--当需要把字符串转换成复合类型时,调用convertFromString抽象方法;当需要把复合类型转换成字符串时,调用convertToString抽象方法。

 

 

public class UserConverter extends StrutsTypeConverter

{

 

    public Object convertFromString(Map context, String[] values, Class toClass)

{

   if (values.length > 1)

   {

    List<User> result = new ArrayList<User>();

    for (int i = 0; i < values.length ; i++ )

    {

     User user = new User();

     String[] userValues = values[i].split(",");

     user.setName(userValues[0]);

     user.setPass(userValues[1]);

     result.add(user);

    }

    return result;

   }

   else

   {

    User user = new User();

    String[] userValues = values[0].split(",");

    user.setName(userValues[0]);

    user.setPass(userValues[1]);

    return user;

   }

 

    }

 

    public String convertToString(Map context, Object o)

{

   if (o instanceof User)

   {

    User user = (User)o;

    return "<" + user.getName() + "," + user.getPass() + ">";

   }

   else if (o instanceof List)

   {

    List<User> users = (List<User>)o;

    String result = "[";

    for (User user : users )

    {

     result += "<" + user.getName() + "," + user.getPass() + ">";

    }

    return result + "]";

   }

   else

   {

    return "";

   }

    }

}

 

方式二并不常用,对于大部分的常用类型,开发者根本无需创建自己的类型转换器,因为struts2可以完成大多数常用类型的转换。