struts2入门02

1、结果页面配置

(1)全局结果页面
    A、result标签配置action方法的返回值到不同的路径里面去。
    B、创建两个action,执行不同的方法或都执行默认方法,让两个action的方法都返回一个字符串,配置到同一个页面里面。
        a、如果多个action,方法里卖弄返回值相同,到页面也是相同的,这个时候使用全局结果页面进行配置
            <package ...>
                <global-results>
                       <result name="error">/jsp/error.jsp</result>
                </global-results><!--只在该package中的action生效-->
            </package>
    
(2)局部结果页面
    配置了全局页面,又配置了局部页面,最终结果以局部的配置为准。
    <action ...>
        <result name="error">/jsp/error.jsp</result>
    </action>
(3)result标签type属性
    配置如何到路径中去(转发or重定向)
    A、默认值:做转发操作,值是dispatcher,一次请求,地址栏不发生变化
    B、redirect:做重定向操作,两次请求,地址栏发生变化
    以上是针对页面的配置的值
    以下是针对action的配置的值
    C、chain:转发到action,一般不用,有缓存问题
    D、redirectAction:重定向到某个action
    <package...>
        <action...>
            <result name="xxx" type="rediretAction">xxx.action</result>
        </action>
    </package>

2、在action获取表单提交数据

取getParameter,getParameterMap
(1)使用ActionContext类获取(官方推荐使用)
    A、创建表单,提交表单到action里面
    B、创建action
     ActionContext actionContext = ActionContext.getContext();
     Map<String,object> map = actionContext.getParameters();
     set<String> keys = map.keySet();//获取key
     for(String key:keys){
        Object[] obj = (Object[])map.get(key);//因为可能有复选框的存在,因此是数组的形式
        System.out.prinln(Arrays.toString(obj));
     }
     
(2)使用ServletActionContext类获取(大部分使用的方式)
    A、调用静态方法,得到request对象
        HttpServletRequest request = ServletActionContex.getRequest();
        String value = request.getParameter(key);
(3)使用接口注入方式获取(一般不用)
    让action类实现接口ServletRequestAware,实现setServletRequest()方法

3、struts2获取表单数据方式

原始方式获取表单封装到实体
    HttpServletRequest request = ServletActionContext.getRequest();
    String value = request.getParameter(key);
    Entity entity = new Entity();
    entity.setValue(value);

(1)属性封装
    A、直接把表单提交的属性封装到action的属性里面
    B、实现步骤
        a、在action成员变量位置定义变量:变量名称和表单输入项的name属性值一样
        b、生成变量的set方法(get,set方法都写出来,可以避免混淆)
    C、只能把表单数据封装到属性里面去,不能把数据直接封装到实体类对象中
(2)模型驱动封装(使用最多)
    A、直接把表单数据封装到实体类对象里面
    B、实现步骤
        a、action实现接口ModelDriven
        b、实现接口里面的方法getModel
        c、在action里面创建实体类对象
        private Entity entity = new Entity();
        public Entity getModel(){
            return entity;
        }
    C、注意问题:一个action,获取表单数据可以使用属性封装或使用模型驱动封装,不能同时使用属性封装和模型驱动封装
(3)表达式封装
    实现步骤:
    a、在action中声明实体类
    private Entity entity;
    b、生成实体类变量set和get方法
    public void setEntity( Entity entity){
       return this.entity;
    }
    public Entity getEntity(){
        this.entity;
    }
    c、在表单输入想的name属性里面写表达式
    <input type="text" name="entity.id">

4、struts2获取数据封装到集合中

(1)封装到list集合
    -声明List<Entity> entityList;
    -创建get/set方法
    -<input name="entityList[0].name"..>
(2)封装到map集合
    -声明map集合
    -生成get/set方法
    -表单输入项中写表达式<input name="map['key'].name"..>

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

(1)相同点:都可以把数据封装到实体类对象中去
(2)不同点:
    -表达式封装,可以把数据封装到不同的实体类对象中去
    -模型驱动封装,不能把数据封装到不同的实体类对象中去

猜你喜欢

转载自blog.csdn.net/qq_40790831/article/details/84889864