打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
struts2 ModelDriven拦截器原理以及使用方法详解

疑问

为什么一个Action类只要继承ModelDriven<User>接口,重写一下getModel方法,就可以访问到前台的数据(当然前台属性名要和user里面的属性名要一致)?


前台

  1. <form action="login.kk" method="post">
  2. <input type="text" name="username" placeholder="请输入用户名"/><br>
  3. <input type="password" name="password" /><br>
  4. <input type="submit" value="登录" />
  5. </form>

 后台

  1. package cn.com.service;
  2. import javax.servlet.http.HttpServletResponse;
  3. import org.apache.struts2.ServletActionContext;
  4. import org.hibernate.SessionFactory;
  5. import org.springframework.*;
  6. import com.opensymphony.xwork2.ModelDriven;
  7. import cn.com.bean.User;
  8. @Repository(value="regedit")
  9. public class Regedit implements ModelDriven<User>{
  10. @Autowired
  11. private SessionFactory sf;
  12. @Autowired
  13. private User user;
  14. @Transactional
  15. public String regedit_user(){
  16. System.out.println("用户名:"+user.getUsername());
  17. System.out.println("密码:"+user.getPassword());
  18. return null;
  19. }
  20. public User getModel() {
  21. return user;
  22. }
  23. }

在回答这个问题的时候,我们先想一个问题?

1、前台:有一个属性名username

2、后台:username属性,并且提供set和get方法

3、是什么起作用把前后台的属性值进行复制呢?

是params拦截器

Struts2在执行一次请求的过程中会把当前的Action对象自动存入值栈中

属性username就是 Action对象名.username或者直接是

username,因为它在栈顶

params拦截器会把前台的属性名在action中的相关参数进行查找 ,有同名的,就把前台属性名的属性值赋值给Action中的属性


重点的问题

1、前台:有两个属性名username password

2、后台:一个User对象的属性名

3、ModelDriven<User>为什么可以把属性赋值给对象里面的属性呢,user和username名称又不一样

先看一下拦截器的操作流程

params拦截器(同名参数赋值)-------prepare拦截器(根据参数如User,去调用类,设置model对象)---------- modelDriven拦截器(将model对象压入valuestack)-params拦截器(同名参数赋值)- action的业务逻辑执行

分析如下

Struts2在执行一次请求的过程中会把当前的Action对象自动存入值栈中,所以当前对象Action在栈顶

第一步经过params拦截器 由于username和user不同名,无法赋值

第二步经过prepare拦截器,生成Model<User>对象

第三步经过 modelDriven拦截器,如果这个类继承了 modelDriven接口就把第二步创建的model对象压入到栈顶

现在User对象在栈顶

user.username等同于username

第四步经过params拦截器,给栈顶的对象赋值


 转自 https://blog.csdn.net/qq_37591637/article/details/88682592

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【Struts2进阶】Struts2深度解析ModelDriven原理
Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五)
笔记三、struts2 的ModeDriven Preparable
模型驱动 ModelDriven
浅谈Struts2前台后台的数据传递
《研磨struts2》第四章 Action 之 4.3 Action的数据
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服