Struts2中基于OGNL的类型转换

讲解之前,大家应该了解,HTTP请求参数都是字符串类型,对于Java我们需要将其转换为相应的数据类型。

Struts2提供了强大的类型转换机制,Struts2的转换机制可以基于OGNL表达式,只要我们把HTTP请求参数(例如表单元素),命名为合法的OGNL表达式,我们就可以充分利用Struts2为我们提供的类型转换机制,也大大的缩减了我们的代码量。以经典的用户登录功能讲解:

一:前台表单:

 <s:form action="login">
    <s:textfield name="user.name" label="用户名"/>
    <s:textfield name="user.pass" label="密码"/>
    <s:submit value="转换"/>
    <s:reset value="重置"/>
  </s:form>
表单中的name属性就是OGNL表达式形式,Struts2会把user.name自动赋值给Action中的user的name属性。

但是使用Struts2这种转换时需要注意:

1:系统会根据映射创建user所对应的User类的实例,但是我们需要为这个类提供无参数的构造器。

2:如果想让user.name为Action中的user的name属性赋值,我们需要在user对应的类中提供setName()方法,Struts2就是通过该方法赋值。

如下:我们创建user所对应的类User,并声明name,pass属性,提供相应的get,set方法。

public class User {
	private String name;
	private String pass;
	public User(){
		
	}
	public User(String name, String pass) {
		this.name = name;
		this.pass = pass;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPass() {
		return pass;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}
	
	
}
Struts2就会通过相应的方法将user.name向Action user的name属性赋值。

二:Action:InputAction

import com.opensymphony.xwork2.Action;

public class InputAction implements Action{
	private User user;
	private String tip;
	public User getUser() {
		return user;
	}

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

	public String getTip() {
		return tip;
	}

	public void setTip(String tip) {
		this.tip = tip;
	}
	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		if(getUser().getName().equals("mao")&&getUser().getPass().equals("3214")){
			setTip("登陆成功");
			return SUCCESS;
		}else{
			return ERROR;
		}
	}
}
三:结果页面代码:

<h3>${requestScope.tip}</h3>
  <h3><s:property value="user.name"/></h3>
四:结果



下面使用Map实现:

一:前台界面 (为了演示实现,可能界面不符合常规)

 <s:form action="mapLogin">
    <s:textfield name="stuMap['one'].name" label="第一个用户名"/>
    <s:textfield name="stuMap['one'].pass" label="第一个密码"/>
    <s:textfield name="stuMap['two'].name" label="第二个用户名"/>
    <s:textfield name="stuMap['two'].pass" label="第二个密码"/>
    <s:submit value="转换"/>
  </s:form>
二:StuMap所对应的类:

public class MapUser {
	private String name;
	private String pass;
	public MapUser(){
		
	}
	public MapUser(String name, String pass) {
		this.name = name;
		this.pass = pass;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPass() {
		return pass;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}
	
}

三:Action: MapAction

public class MapAction implements Action{
	private Map<String,MapUser>stuMap;
	private String tip;
	public Map<String, MapUser> getStuMap() {
		return stuMap;
	}
	public void setStuMap(Map<String, MapUser> stuMap) {
		this.stuMap = stuMap;
	}
	public String getTip() {
		return tip;
	}
	public void setTip(String tip) {
		this.tip = tip;
	}
	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		if(getStuMap().get("one").getName().equals("mao")&&getStuMap().get("one").getPass().equals("3214")){
			setTip("登陆成功");
			return SUCCESS;
		}else{
			return ERROR;
		}
	}
}

四:结果界面代码:

 <h3>第一个用户名:<s:property value="stuMap['one'].name"/></h3><br>
  <h3>第一个密码:<s:property value="stuMap['one'].pass"/></h3><br>
  <h3>第二个用户名:<s:property value="stuMap['two'].name"/></h3><br>
  <h3>第二个密码:<s:property value="stuMap['two'].pass"/></h3><br>

五:输入相应的用户名密码 返回视图:

Struts2中基于OGNL的类型转换_第1张图片

   List与Map的处理基本一致:只是Map是“Action属性名[‘key 值’] 属性名” 而List是“Action属性名[‘索引 值’] 属性名”

你可能感兴趣的:(javaee,struts2,类型转换,Ognl)