博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts2第十二篇【模型驱动】
阅读量:7019 次
发布时间:2019-06-28

本文共 2268 字,大约阅读时间需要 7 分钟。


tags: Struts2


什么是模型驱动

在Struts2中模型驱动就是用来封装数据的..完成数据的自动封装.

为什么要使用模型驱动?

我们之前就使用过Sturts2的数据自动封装功能,是用params拦截器完成的...既然有了params拦截器,为啥还要模型驱动??

当我们使用params拦截器完成数据自动封装的时候,如果要封装的是JavaBean对象,那么在web表单中就必须的name写上javaBean.属性名....

这样的话,web层和Action层就耦合了...因为在web层必须要知道封装的JavaBean对象是什么才能够实现自动封装

模型驱动就解决了这个问题!即时不知道Action层的JavaBean对象是什么,也能够完成数据自动封装!

模型驱动的实现原理

实现模型驱动功能也是由拦截器完成的,我们来看看拦截器到底做了什么吧....

复制代码

拦截方法的源码是这样的:

public String intercept(ActionInvocation invocation) throws Exception {		//得到当前要执行的Action对象		Object action = invocation.getAction();		//判断该Action对象是否实现了ModelDriven接口		if(action instanceof ModelDriven) {			ModelDriven modelDriven = (ModelDriven)action;						//获取值栈对象			ValueStack stack = invocation.getStack();						//得到model的对象			Object model = modelDriven.getModel();						//把对象存到值栈对象中			if(model != null) {				stack.push(model);			}			if(this.refreshModelBeforeResult) {				invocation.addPreResultListener(new ModelDrivenInterceptor.RefreshModelBeforeResult(modelDriven, model));			}		}		return invocation.invoke();	}复制代码

把model对象放到值栈对象之后,**Parameters 拦截器将把表单字段映射到 ValueStack 栈的栈顶对象的各个属性中. **

也就是说,使用模型驱动是需要配合Params拦截器完成的!

使用数据模型驱动

实现ModelDriven接口

  • 实现ModelDriven接口,重写方法....实现接口时,要封装的对象是什么,形参类型就给什么
public class UserAction extends ActionSupport implements ModelDriven
{ public String login() { return SUCCESS; } @Override public User getModel() { return null; }}复制代码

对象实例化

public class UserAction extends ActionSupport implements ModelDriven
{ //这里一定要实例化 User user = new User(); public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public User getModel() { return user; }}复制代码

测试

JSP提交页面,直接写上JavaBean对象的属性就行了..不需要写上JavaBean对象的名称!

用户名:
密码:
电话:
邮箱:
复制代码
  • 在Action业务方法中输出User对象的数据
@Override    public String execute() throws Exception {        System.out.println(user);        return SUCCESS;    }复制代码


如果您觉得这篇文章帮助到了您,可以给作者一点鼓励

转载地址:http://vtzxl.baihongyu.com/

你可能感兴趣的文章
MP实战系列(三)之实体类讲解
查看>>
12.2、python内置函数—format
查看>>
WordPress更新提示无法创建目录的解决方案
查看>>
东方明珠,上海滩传媒旗舰的华丽转身
查看>>
Ruby 中的 Profiling 工具
查看>>
Mac Terminal 常用命令
查看>>
域名商的正确打开方式
查看>>
【KnewOne Talk】郭宇:只为美好体验
查看>>
人脸识别登录:加强系统认证
查看>>
阿里云提示漏洞:destoon变量覆盖导致延时注入
查看>>
Nacos 计划发布v0.2版本,进一步融合Dubbo和SpringCloud生态
查看>>
Spring Boot 2.2 首个里程碑版本 M1 发布
查看>>
练就Java24章真经—你所不知道的工厂方法
查看>>
极路由通过SSH添加静态路由表之后无法跳转的问题
查看>>
Apache Kylin v3.0.0-alpha 正式发布
查看>>
熊猫VR主题乐园来袭,国宝的“卖萌”事业要全球化
查看>>
[AlwaysOn Availability Groups]AlwaysOn健康诊断日志
查看>>
这个“达芬奇”不一般!它是美国医生的好帮手
查看>>
Linux学习 Unit 8
查看>>
构建工具Gulp
查看>>