zoukankan      html  css  js  c++  java
  • Struts2学习(二)

    一、封装请求正文到对象(非常重要
     
    1 、静态参数封装
    在struts.xml配置文件中,给动作类注入值。调用的是setter方法

    原因:是由一个staticParams的拦截器完成注入的

    http://localhost:8080/strutsParams/action1.action

    2、动态参数封装:开发时用到的
    通过用户的表单封装请求正文参数
     
    2.1 、动作类作为实体模型
    数据模型和动作类写在一起
    实体模型:Entity,对应数据库中表的记录(注意类对应的是表结构,而对象对应的是一条记录)
    表单中的name属性取值必须和动作类中的数据模型的set方法后的名称一致  <input type="text" name="username"/>对应动作类中的setUsername方法
    原因:是由params拦截器(ParametersInterceptor)完成的
    2.2 、动作类和实体模型分开
    数据模型和动作类分开写

    会出现空指针异常

    问题:由于我们没有初始化user对象,默认为null,一调用setUser方法,就空指针异常了。但是框架却封装进去值了。
    原因:通过执行过程:
    getUser --> setUser --> getUser
    第一次执行getter方法看对象是否存在,如果不存在就是用反射创建一个对象
    第二次执行setter方法 不存在对象就创建一个对象,把它set回去
    第三次执行getter方法得到对象,调用对应的set属性方法为属性赋值

     2.3、模型驱动(开发中采用的方式

    建立动作类和数据模型分开的前提下

    原因:是由一个modelDrivenIntercepter拦截器做的

    步骤:
    1、实现modelDriven的接口
    2、实现接口中的抽象方法getModel
    3、在使用模型驱动的时候,数据模型必须由我们自己来实例化
     private User user = new User();

     表单中name属性的取值已经不是一个字符串了

    二、数据类型的转换(实际开发中几乎不用)
    1、开发中的情况:
    实际开发中用户通过浏览器输入的数据都是String或者String[]。
    String/String[]————填充模型(set方法)————>POJO(plain old java object) pojo中有java的数据类型。
    POJO————————获取(get方法)————>页面展示:String
     
    2、类型转换情况
    写数据:(增,删,改)都是String或String[]数组转换为其他类型。
    读数据:(查)其他类型转换为String。
     
    3、Struts2提供的常用类型转换
    a.基本数据类型自动转换。
    b.日期类型:默认按照本地日期格式转换(yyyy-MM-dd)。
    c.字符串数组:默认用逗号+空格,连接成一个字符串。
     
    4、自定义类型转换器(知道)
    示例:把日期格式按照 MM/dd/yyyy的格式转换

    4.1、Struts2中的类型转换器结构:

    4.2、编写类型转换器(编写一个类继承StrutsTypeConverter,实现抽象方法)
    第一步:编写一个类,继承自StrutsTypeConverter,实现抽象方法convertFromString,convertToString的抽象方法
    4.3、注册类型转换器
    局部类型转换器:只能指定javabean中的属性用
    按照属性来注册。在属性所属的javabean的包下建立一个.properties文件。文件名称:javabean名称-conversion.properties

    全局类型转换器:(推荐)
    按照要转换的数据类型来注册
    在顶层路径建立一个固定名称xwork-conversion.properties的属性文件

     
    5、转换失败后的处理(重要)
    问题一:当转换失败后,页面出错,提示:

    解决办法:配置回显结果视图

     

    问题二:配置了回显视图后,当转换失败时,可以回到请求页面,但是表单数据都没了

    显示错误提示:借助Struts2的标签库

    回显数据:使用struts2的标签库生成表单(建议使用

     1 <%@ taglib uri="/struts-tags" prefix="s" %>  <%-- 导入标签库--%>
     2 <s:fielderror /> <%-- 字段错误提示--%>
     3 <s:actionerror /> <%-- 动作错误提示--%>
     4 <%-- struts2的form表单标签提供了和原始HTML标签几乎一致的属性
     5 action:请求地址,直接动作名称,不用前面加上contextPath属性
     6 method:请求方式,struts的表单项默认post
     7 enctype:表单编码的MIME(多用途互联网扩展类型)
     8 --%>
     9 <s:form>
    10 </s:form>

    问题三:错误信息中文提示,使用的是struts2的国际化

    类型转换器当转换失败后,进入input视图是由conversionError的拦截器完成

    要想使用类型转换中的错误处理,在定义Action时必须继承ActionSupport实现类

    有志者,事竟成,破釜沉舟,百二秦关终属楚;苦心人,天不负,卧薪尝胆,三千越甲可吞吴。
  • 相关阅读:
    iOS开发UI篇—简单介绍静态单元格的使用
    iOS开发UI篇—UITableview控件使用小结
    iOS开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
    iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局
    iOS开发UI篇—实现UItableview控件数据刷新
    iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序
    iOS开发UI篇—UITableviewcell的性能问题
    iOS开发UI篇—UITableview控件基本使用
    iOS开发UI篇—UITableview控件简单介绍
    A1055. The World's Richest
  • 原文地址:https://www.cnblogs.com/1989guojie/p/6227479.html
Copyright © 2011-2022 走看看