struts2参数封装

参数封装分类静态参数封装和动态参数封装,下面分别来讲

静态参数分装:

静态分装,主要是使用配置文件和注入的方式来进行封装

<action name="action1" class="com.itheima.web.action.Demo1Action" method="addUser">
    <!-- 当我们不写任何拦截器时,默认的拦截器栈defaultStack它来为我们工作。
        但是,只要写了任何一个拦截器,默认的就全都不起作用了 -->
    <!-- 使用注入的方式,给动作类的中的参数赋值 -->
    <param name="username">张三</param>
    <param name="age">18</param>
</action>

在Demo1Action中定义两个变量username,age用来进行注入,关键是需要继承ActionSupport

import com.opensymphony.xwork2.ActionSupport;
public class Demo1Action extends ActionSupport {
    private String username;
    private int age;

    public String addUser(){
        System.out.println(username+","+age);
        return null;//不返回任何结果视图   NONE常量
    }


    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

}

动态注入:

动态注入有三种方式:
一:动态参数封装,这个的实现是struts2中的params拦截器完成的

<action name="action2" class="com.itheima.web.action.Demo2Action" method="addUser"></action>

action与静态的一样,同时注意继承actionSupport

import com.opensymphony.xwork2.ActionSupport;
/**
 * 动态参数封装,第一种情况:
 *  数据模型与动作类写在一起
 */
public class Demo2Action extends ActionSupport {

    private String username;
    private int age;

    public String addUser(){
        System.out.println(username+","+age);
        return null;//不返回任何结果视图   NONE常量
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}

二、动态参数封装的第二种形式:数据模型与动作类分开写,使用注入的方式。首先我们看怎么做。
首先需要定义个javabean如下:

package com.zeroyoung.domain;

/**
 * Created by yanglin on 2016/11/2.
 */
public class User {
    private String username;
    private int age;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

在动作类当中定一个 user对象,

import com.itheima.domain.User;
import com.opensymphony.xwork2.ActionSupport;
/**
 * 动态参数封装,第二种情况:
 *      数据模型与动作类分开写
 */
public class Demo3Action extends ActionSupport {
    //定义数据模型对象
    private User user ;

    public String addUser(){
        System.out.println(user.getUsername()+","+user.getAge());
        return null;//不返回任何结果视图   NONE常量
    }
    public User getUser() {
        System.out.println("getUser");
        return user;
    }
    public void setUser(User user) {
        System.out.println("setUser");
        this.user = user;
    }
}

配置文件:

<action name="action2" class="com.zeroyoung.web.action.Demo2Action" method="addUser"></action>

参数传入到方法当中的时候由于方法当中并没有定义username,和age。所有无法进行注入,需要在传入参数的key上面写明如下:

<body>
    <form action="${pageContext.request.contextPath}/action2.action" method="post">
        <%--表单中的name属性取值必须和动作类中数据模型的set方法后面的名称一致。 --%>
        用户名:<input type="text" name="user.username" /><br/>
        年龄:<input type="text" name="user.age"/><br/>
        <input type="submit" value="提交" />
    </form>
</body>

执行过程:首先当浏览器请求到大了Demo3Action 会调用getuser方法得到user对象,然后查看user对象是否为空,若为空,则会创建一个user对象,然后调用setUser,然后再次调用getuser方法得到对象然后设置参数

三、动态参数封装的第三种形式,使用驱动模型:
表单的写法与第一种一样,同时数据和模型分开

<action name="action3" class="com.zeroyoung.web.action.Demo3Action" method="addUser"></action>

动作方法,需要继承actionsupport,实现ModelDriven接口如下:

package com.zeroyoung.web.action;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.zeroyoung.domain.User;

/**
 * 动态参数封装,第三种情况:模型驱动
 *      要想使用模型驱动,必须数据模型与动作类分开写
 * 实现模型驱动的步骤:
 *      1.实现一个ModelDriven的接口
 *      2.实现接口中的抽象方法getModel()
 *      3.在使用模型驱动的时候,数据模型必须由我们自己来实例化
 * 
 * 是由一个ModelDriven的拦截器为我们做的
 *
 * 实际开发中采用的方式
 *
 */
public class Demo3Action extends ActionSupport implements ModelDriven<User> {
    //需要自己创建一个对象,ModelDriven不会帮助创建
    private User user = new User();

    public User getModel() {
        return user;
    }

    public String addUser(){
        System.out.println(user.getUsername()+","+user.getAge());
        return  null;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值