Struts(二)

1、请求参数封装:

         明确:封装参数有两种情况。

         静态参数封装:

                   我们学习它不是为了掌握如何封装静态参数,而是了解一个事情:

                            我们没有做的事,不是没人做,而是框架的拦截器为我们已经实现了。

                   封装静态参数是由一个叫做staticParams的拦截器实现的

         动态参数封装:(是我们学习的重点)

                   属性驱动:

                            动作类和模型在一起

                                     要求表单中的name取值和动作类的get/set方法必须一致

                   是一种叫做params的拦截器为我们封装的

220918_9DAq_2892414.png

                    动作类和模型分开

                                     要求动作类中需要有给模型(JavaBean),并且有get/set方法。

                                     表单中name属性取值的写法:模型名称.属性名称(需要能找到get/set方法)

220940_9dD8_2892414.png

                    模型驱动:(一般使用这个)

                            实现要求:

                                     1、要求实现一个ModelDriven接口

                                     2、提供接口中抽象方法的实现,返回模型对象

                                     3、定义一个模型对象,必须实例化好。new出来

是由一个叫做params的拦截器为我们封装的,但是在params之前需要先执行一个modelDriven的拦截器

它在同一个动作类中只能有一个模型数据

221001_18kw_2892414.png

2、参数封装的一些细节:

         a、数据类型的问题:

                   明确:表单中提交的数据类型(除去文件)只有两个。

                         一个是字符串,一个是字符串数组。

         b、数据类型的转换

                   框架会自动为我们转换的:

                            1、基本类型自动转换

                            2、字符串数组会按照逗号+空格拼接成字符串

                            3、日期会按照本地格式自动转换成日期对象

                                     本地格式:yyyy-MM-dd

         c、类型转换失败的异常处理

                   非常重要(不仅适用于类型转换失败,几乎适用于所有struts2框架运行异常的处理)

                   此处最关键点就是:input结果视图

                   当页面出现异常:

221021_zuAI_2892414.png

         提示是没有一个input视图被定义时,我们要做的就是配置一个input结果视图。

221040_hdD7_2892414.png

        视图前往的页面,是从哪来回哪去。并且前往的方式要用dispatcher[dɪ'spætʃə]

         d、借助struts2的异常提示标签,显示错误信息

                   s:fielderror标签:

                            指的就是字段错误。其实就是表单中属性数据有错误。

221103_HMuw_2892414.png

         s:actionerror标签:

                            指的就是动作错误。在执行动作方法时,数据有错误。

         e、类型转换处理的一些思想

                   解决保存:MM/dd/yyyy日期的方式需要用到struts2的自定义类型转换器。

221127_2Gma_2892414.png

        转换思想:

                       保存到数据库:

                            转换就是把字符串或者字符串数组转成其他数据类型

                       从数据库中取数据显示:

                            把其他数据类型转成字符串。

                   自定义类型转换器

                            编写步骤:

                                     1、定义一个普通类,继承StrutsTypeConverter

                                               对里面的两个抽象方法提供具体的转换实现。

                                     2、在需要使用类型转的实体类所在的包下,创建一个properties文件

                                               文件的命名规范:

                                                        实体类名称-conversion.properties

                                               文件的内容:

                                                        实体类中需要用类型转换的属性=类型转器全类名

                                                        例如:

                                                        birthday=cn.itcast.utils.MyTypeConverter

                            注意:

                                当我们自定义类型转换器之后,默认的类型转换就失效了。

         f、struts2表单标签的数据回显

                   需要使用struts2的表单标签

                            s:form:用于创建一个form表单

                                action:请求的动作名称。此处可以不写后缀,它会自动补全。

                                         也不用写contextPath,它也会自动补全。

                                method:请求的方式。默认就是Post,可以不写。

                                namespace:动作所在的名称空间。

                            s:textfield:用于创建文本框。相当于input type="text"

                            s:submit:用于创建一个提交按钮。相当于input type="submit"

                  struts2的表单标签:

                            会自带回显功能。其实本质就是给value属性赋值。

221153_CXaY_2892414.png

                    关于struts2表单标签和HTML表单标签的选择问题:

                            如果需要高效率:选择HTML标签

                            如果需要便捷性:选择struts2标签。

3、全局结果视图和局部结果视图

         全局结果视图的配置方式:

                   标签:

                            global-results。

                   在标签内部写:result。和我们之前的配置方式就一样了。

                   例如;

                            <global-results>

                                     <result name="login">/login.jsp</result>

                            </global-results>

221214_9Kjk_2892414.png

全局结果视图的作用范围:

                   所有的动作都适用。前提是必须继承定义全局结果视图的包。

         全局结果视图和局部结果视图的优先级:

                   先找局部结果视图,再找全局结果视图。

4、访问ServletAPI的另外两种方式:

         第一种:通过实现接口的方式

221232_IFSm_2892414.png

            第二种:通过ActionContext对象来访问三个域

221251_5No3_2892414.png

5、封装集合数据

         a、封装List结构的集合数据

221317_BTC8_2892414.png

        b、封装Map结构的集合数据

转载于:https://my.oschina.net/changenow/blog/785323

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值