【Struts2】:基于OGNL的类型转换

        借助于内置的类型转换器,Struts2可以完成字符串和基本类型之间的类型转换。除此之外,借助于OGNL表达式的支持,Struts2允许使用另一种简单方式将请求参数转换成复合类型。系统的Action类的代码片段如下:

public class LoginAction extends ActionSupport
{
	// 使用User类型的成员变量封装请求参数
	private User user;
	private String tip;

	// user的setter和getter方法
	public void setUser(User user)
	{
		this.user = user;
	}
	public User getUser()
	{
		return this.user;
	}
	public String execute() throws Exception
	{
		// 通过user的name属性和pass属性来判断控制逻辑
		if (getUser().getName().equals("ljw")
			&& getUser().getPass().equals("123") )
		{
			addActionMessage("登录成功");
			return SUCCESS;
		}
		addActionMessage("登录失败!!");
		return ERROR;
	}
}

从上面Action的代码可以看出,该请求Action里包含一个User类型属性——这个属性需要进行类型转换,Struts2框架接受到HTTP请求参数后,需要将这些请求参数封装成User对象。
但Struts2提供的OGNL表达式允许开发者无须任何特殊处理,只需要在定义表单域时使用OGNL表达式来定义表单域的name属性。JSP页面的表单代码如下:
<body>
<h3>利用OGNL的进行类型转换</h3>
<s:form action="login">
	<!-- 该表单域封装的请求参数名为user.name -->
	<s:textfield name="user.name" label="用户名"/>
	<!-- 该表单域封装的请求参数名为user.pass -->
	<s:textfield name="user.pass" label="密码"/>
	<tr>
		<td colspan="2"><s:submit value="转换" theme="simple"/>
		<s:reset value="重填" theme="simple"/></td>
	</tr>
</s:form>
</body>
上面的表单代码中定义了两个单行文本框,对应两个请求参数,请求参数名并不是普通参数名,而是user.name和user.pass的形式——这就是OGNL表达式的形式,Struts2会把user.name参数的值赋值给Action实例的user属性的name属性,并将user.pass参数的值赋值给Action实例的user属性的pass属性。
        通过这种方式,Struts2可以将普通请求参数转换成复合类型对象,但在使用这种方式时有如下几点需要注意:
        1 因为Struts2将通过反射来创建一个复合类(User类)的实例,因此系统必须为该复合类提供无参数的构造器。
        2 如果希望使用user.name请求参数的形式为Action实例的user属性的name属性赋值,则必须为user属性对应的复合类(User类)提供setName()方法,因为Struts2是通过调用该方法来为该属性赋值的。当然Action类中还应该包含getUser()方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值