模型驱动一 | 学习笔记

简介: 快速学习模型驱动一,介绍了模型驱动一系统机制, 以及在实际应用过程中如何使用。

开发者学堂课程【Java Web开发系列课程 - Struts2框架入门模型驱动一】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/537/detail/7299


模型驱动一

 

又叫做 ModelDriven,重新写一个 Action 名字叫做 userModelAction。

实现一个 ModelDriven 的接口,把实现的类写上去。Get Model 的一个方法,直接改 user 即可。

看一下源码,这是一个 ModelDriven 的接口,里面有 Get Model,返回的是 action里面的对象。 

ModelDriven 有一个拦截器

简单看一下,找 ModelDriven,是 opensymphony 下面的 ModelDriven 完成的。

拦截器,根据 intercept 的方法。判断这个是否是 ModelDriven 的类型。

public void setRefreshModelBeforeRes(boolean val)

this. refreshModelBeforeResult=val;

BOverride

public String intercept(ActionInvocati invocation) throws Exception

object action= invocation. getAction()

if (action instanceof ModelDriven)

ModelDriven modelDriven=(ModelDriv)action

Valuestack stack invocationgetstack();

object model= modelDriven. getModel();

if (model I= null)

stack. push(model);

if (refreshModelBeforeResult){

invocation.addPreResultListener(new RefreshModelBeforeResult(,mode1)

}

return invocation.invoke();

}

/**

要实现接口,之所以实现接口,在 modeldriven instances 里面,不是属于他的处理方法,进不来。

实现了这个接口,就是这个类型,限定了它。观察源码,观察底层的东西。

它把表达上的数据设置到对象上面来,struts2去完成这些功能,都是通过这些拦截器去完成的,这已经提到过,有这样的概念。

有 ModelDriven 拦截器去完成对象的赋值,他来了就判断,不属于他就不会做事情。你 action 要实现 ModelDriven 接口。

一旦 Action 属于 ModelDriven,转换成 ModelDriven,注意 ModelDriven 里面有一个 get model,如果不去写 get model,不能赋值。model 不等于 null,而默认情况是空,应该给他一个对象。

原因是可以判断他,做完之后去看一下这些值,刷新以后去设置,把user对象往值里面放。

写完之后要写 register,输出 user,返回 Action.SUCCESS。页面要简单一点,现在请求 regmodle 界面,改一改,要不然重名。

配置一下,name=regModle,成功以后,到显示页面,断点启动,为了看一下如何执行。

请求 regModle,点击,然后填写年龄邮箱,提交,应该走到 ModelDriven。

现在直接调过去,得到值了,还需要设置。DefaultAction invocation,再去请求一下,直接走到 proxy,需要一步一步走。 

DefaultActioninvocation 重新提交一下请求,有的端点必须跟进去,否则进不去。下一步,有的时候找不到,就会跳出。

应该走到 DefaultActioninvocation 里。

找 struts3.4,确定,小屏幕,进入到 Dispatcher下,往下走,Actionproxy Factory先进去,creatactionproxy,找 DefaultActionproxyFactory 这个类,不用管container。

现在在 dispatcher 这个类,最后有一个 proxy,会有一个 getInvocation,判断它,往里面走,继续走,注意看一下,有一个 inv,走进去看一下。

现在还没有值,往下走,走回来再进去,在 proxy Execute 执行,注意 proxy,调用它的执行,要去往下走。在 dispatcher 里,走断点,跳过去,非常麻烦。

这里面有一个 get Invocation 之类的,往里面走之前设置,再往下走,这个DefaultInvocation,看 Modeldriven,往下走,每次判断一下,然后是 invoke,它会去调用下一个,刚刚走 invoke 方法,它的 invoke 方法是调用拦截器的。

Invocation 的设置地方,应该是走过了断点。通过 Modeldriven,把这个值设置过来。

jsp 页面

<form action="regModel. action"method="post">

用户名:<input type="text"name="name"/><br

密码:<input type="pas sword"name="pd"/><br>

年龄:<input type="text"name="age

<br>

邮箱:<input type="text"name=email"/><br>

<input type="submit"value="提交/

</form>

UserModelAction

publicclassUserModelActionimploments ModelDriven<User>{

private User user=new User();

public String register

System.out. println(user);l

return Action.SUCCESS;

}

public User getModel(){

return user;

}

属性驱动和模型驱动,自选,如果属性较多可以使用模型驱动。

相关文章
|
前端开发 JavaScript 安全
javascript:void(0);用法及常见问题解析
【6月更文挑战第3天】JavaScript 中的 `javascript:void(0)` 用于创建空操作或防止页面跳转。它常见于事件处理程序和超链接的 `href` 属性。然而,现代 web 开发推荐使用 `event.preventDefault()` 替代。使用 `javascript:void(0)` 可能涉及语法错误、微小的性能影响和XSS风险。考虑使用更安全的替代方案,如返回 false 或箭头函数。最佳实践是保持代码清晰、安全和高性能。
6188 0
|
网络协议 程序员 网络架构
UDP报文结构详解:一篇文章带你搞懂
**UDP报文格式简述:**包含源端口、目的端口、长度和检验和4个字段,用于传输层无连接通信。IP报文格式关键点:版本、首部长度、服务类型、总长度、标识、TTL和首部检验和,确保数据在网络中的路由与可靠性。了解这些基础对于网络协议学习至关重要。
1063 2
|
Python
python函数中把列表(list)当参数时的"入坑"与"出坑"
在Python函数中,传递的参数如果默认有一个为 列表(list),那么就要注意了,此处有坑. 入坑 挖坑 def f(x,li=[]): for i in range(x): li.
4328 0
|
3天前
|
数据采集 人工智能 安全
|
13天前
|
云安全 监控 安全
|
4天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1089 152
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1752 9