Struts核心业务之请求数据的自动封装

请求数据的自动封装


三种方法:

1.OGNL方式

2.拦截器params

3.action实现ModelDriven<T>接口


方法一:1.OGNL方式


1.创建数据实体类

public class User {
      private String userName;
      private String passWord;
      
      
      public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	 public String getPassWord(){
			return passWord;
		}
	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}
	 
}
2.创建Action类进行数据的读取

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {
     private User user;
     
     //get()和set()方法不能偷懒得都写上,不然会出现获取不到信息的尴尬局面~切记
     public void setUser(User user) {
		this.user = user;
	}
   public User getUser() {
		return user;          
	}
	  public String login() {
		  System.out.println("用户名"+user.getUserName());
		  System.out.println("密码"+user.getPassWord());
       return "login";
	}
}
3.登录界面,进行数据的输入

 <body>
    <form action="${pageContext.request.contextPath}/login" name="frmlogin" method="post">
        用户名:<input type="text" name="user.userName"/><br>
        密 码:<input type="text" name="user.passWord"/><br>
     <input type="submit" value="提交"><br>
    </form>
  </body>

运行结果:


小贴士:我们通过user.userName这种方式获取值其实就是使用了ognl表达式

就是往根(root,值栈valueStack)中存放值,而值栈中的栈顶元素也就是为当前action,我们在action中设置user的get、set属性,即可以让存进来的值匹配到,进而将对应属性赋值成功。




方法二:拦截器params


1.当我们直接在action中封装实体的时候,我们可以直接获取值,不用通过bean对象

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {
	 private String userName;
     private String passWord;
     
     
     public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	 public String getPassWord(){
			return passWord;
		}
	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}
	  public String login() {
		  System.out.println("用户名"+userName);
		  System.out.println("密码"+passWord);
       return "login";
	}
}
2.登录界面name属性值必须和实体属性值一致

<body>
    <form action="${pageContext.request.contextPath}/login" name="frmlogin" method="post">
      用户名:<input type="text" name="userName"/><br>
         密码:<input type="text" name="passWord"/><br>
     <input type="submit" value="提交"><br>
    </form>
  </body>

运行结果:



小贴士:我们之所以能够直接获取,是因为拦截器params自动帮我们拦截匹配了





方法三:action实现ModelDriven<T>接口


1.同样的我们需要一个实体类user

public class User {
      private String userName;
      private String passWord;
      
      
      public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	 public String getPassWord(){
			return passWord;
		}
	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}
	 
}
2.创建一个活动类同时实现ModelDriven<T>接口
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class MyDateTest extends ActionSupport implements ModelDriven<User>{

	private User user=new User();
	
	public User getModel() {     //必须重写getModel方法,并且将实体对象作为返回值
		return user;
	 }
    public String login(){
    	System.out.println("用户名:"+user.getUserName());
    	System.out.println("密码:"+user.getPassWord());
    	return "success";
    }
	
}
3.登录界面进行数据提交
 <body>
    <form action="${pageContext.request.contextPath}/login" name="frmlogin" method="post">
      用户名:<input type="text" name="userName"/><br>
         密码:<input type="text" name="passWord"/><br>
     <input type="submit" value="提交"><br>
    </form>
  </body>
运行结果:


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值