小议struts2类型转换

 

 

今天,小编拿出珍藏已久的文章来和大家共享,说到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抽象方法。

 

     下面是一段示例代码,更详细的情况请参考《struts2权威指南》(李刚编著)一书page142

 

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可以完成大多数常用类型的转换。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值