疑问为什么一个Action类只要继承ModelDriven<User>接口,重写一下getModel方法,就可以访问到前台的数据(当然前台属性名要和user里面的属性名要一致)? 前台
后台
在回答这个问题的时候,我们先想一个问题? 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 |
|