4天--Struts2相关学习(day02)

本文深入探讨Struts2框架的核心功能,包括结果页面配置、表单数据获取与封装、集合数据处理及客户功能实现。详细讲解了全局与局部结果页面配置、四种结果类型,以及通过属性、模型驱动和表达式进行数据封装的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在day01中的最后项目里只是将list部分servlet代码改为了action代码,也就是说只能运行出客户列表里的部分内容(并且不能换下一页,即servlet实现功能全部不能实现(pps:应为将servlet包删除了))

今天内容

1 结果页面配置

1)全局结果页面

2)局部结果页面

- 配置全局也配置局部,最终局部为准

 

3result标签type属性

- 默认值 dispatcher做转发

- redirect做重定向

- chain:转发到action

- redirectAction:重定向到action

 

2action获取表单提交数据

1)使用ActionContext类获取

2)使用ServletActionContext类获取

3)使用接口注入方式获取

- 使用ServletActionContext类操作域对象

 

3 struts2提供获取表单数据方式

1)属性封装

- 定义变量,变量和表单输入项name属性值一样,生成getset方法

2)模型驱动封装(重点)

- 实现接口,实现接口里面的方法,表单输入项name属性值和实体类属性名称一样

3)表达式封装

4)表达式封装和模型驱动封装比较

- 相同点:可以把数据封装到实体类对象里面

- 不同点:表达式封装可以封装到不同的实体类里面

 

4 struts2获取数据封装到集合中(会用)

1)封装到list集合

2)封装到map集合

 

5 案例-添加客户功能

结果页面配置

全局结果页面(只适用于一个package标签内,其余标签不受影响)

1 result标签配置action方法的返回值到不同的路径里面

 

2 创建两个action,执行默认的方法execute方法,让两个action的方法都返回success,返回success之后,配置到同一个页面里面

1)如果多个action,方法里面返回值相同的,到页面也是相同的,这个时候可以使用全局结果页面配置

2)在package标签里面配置

局部结果页面

1)配置全局页面,也配置了局部页面,最终以局部配置为准

Result标签的type属性

1 result标签里面除了name属性之外,还有一个属性 type属性

1type属性:如何到路径里面(转发还是重定向)

 

2 type属性值

1)默认值,做转发操作,值是 dispatcher

访问book.action结果还是book.action,路径并没有改变

 

2)做重定向操作,值是 redirect

访问的是book.action,结果转到了world.jsp里面,路径已经改变

 

2)上面两个值dispatcherredirect,这两个值一般针对到页面中配置,

配置到其他的action里面

- chain:转发到action,一般不用,缓存问题

- redirectAction:重定向到action,即访问另一个.action结果已经改变

Action获取表单提交数据

1 之前web阶段,提交表单到servlet里面,在servlet里面使用request对象里面的方法获取,getParametergetParameterMap

 

2 提交表单到action,但是action没有request对象,不能直接使用request对象

 

3 action获取表单提交数据主要三种方式

1)使用ActionContext类(官方推荐,完全解耦合)

2)使用ServletActionContext类(大多数人使用)

3)使用接口注入方式

使用ActionContext类获取

1)因为方法不是静态的方法,需要创建ActionContext类的对象

2)这个ActionContext类对象不是new出来的,

 

1 具体演示

1)创建表单,提交表单到action里面

2action使用ActionContext获取数据

使用ServletActionContext类获取

1)调用类里面静态方法,得到request对象

使用接口注入(了解)

1 action实现接口,为了得到request对象

在action操作域对象

1 requestsessionservletContext域对象

 

2 使用ServletActionContext类操作

Struts2封装获取表单数据方式

原始方式获取表单封装到实体类对象

ps:这是最基本的方式,虽然可能会比较麻烦,但这是最能实现的方式。

属性封装(会用)

1 直接把表单提交属性封装到action的属性里面

 

2 实现步骤

1)在action成员变量位置定义变量

- 变量名称和表单输入项的name属性值一样

2)生成变量的set方法(把setget方法都写出来)

 

3 使用属性封装获取表单数据到属性里面,不能把数据直接封装到实体类对象里面

还是要生成对象用setXXX()方法将变量值赋到对象中

模型驱动封装(重点)

1 使用模型驱动方式,可以直接把表单数据封装到实体类对象里面

 

2 实现步骤

1action实现接口 ModelDriven

2)实现接口里面的方法 getModel方法

- 把创建对象返回

 

3)在action里面创建实体类对象

 

 

3 使用模型驱动和属性封装注意问题:

1)在一个action中,获取表单数据可以属性封装,使用模型驱动封装,

不能同时使用属性封装和模型驱动封装获取同一个表单数据

如果同时使用,只会执行模型驱动

表达式封装(会用)

1 实现过程

1)使用表达式封装可以把表单数据封装到实体类对象里面

 

第一步 action里面声明实体类

第二步 生成实体类变量的setget方法

第三步 在表单输入项的name属性值里面写表达式形式

2 把表达式封装归类到属性封装里面

比较表达式封装和模型驱动封装

1 使用表达式封装和模型驱动封装都可以把数据封装到实体类对象里面

 

2 不同点:

1)使用模型驱动只能把数据封装到一个实体类对象里面

- 在一个action里面不能使用模型驱动把数据封装到不同的实体类对象里面

即 implements 的 ModelDriven<???>中的?只能是一个对象

 

2)使用表达式封装可以把数据封装到不同的实体类对象里面

封装到集合里面

封装数据到List集合

第一步 action声明List

第二步 生成list变量的setget方法

第三步 在表单输入项里面写表达式

封装数据到Map集合

第一步 声明map集合

第二步 生成getset方法

第三步 在表单输入项的name属性值里面写表达式

案例-添加客户功能

1 模型驱动获取表单数据

2 hibernate实现

3 添加之后到列表页面中,让列表的action执行一次

完成任务

1 客户列表功能

 

2 添加客户功能

 

3 修改客户

 

4 删除客户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值