Struts2框架之参数封装

①静态参数封装: 在运行期的不发生变化的数据, 或者是一些配置相关的数据可以做静态封装.

"struts.xml"配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <constant name="struts.devMode" value="true"></constant>
    
    <package name="person" extends="struts-default" namespace="/person">
        <action name="test1" class="com.rl.action.PersonAction" method="hello1">
            <param name="name">张三</param>
            <result name="success">/success.jsp</result>
        </action>
    </package>
</struts>

动作类代码:

package com.rl.action;

import com.opensymphony.xwork2.ActionSupport;

public class PersonAction extends ActionSupport{
    
    /*
     * 用于接收静态参数的
     */
    private String name;
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String hello1(){
        System.out.println(name);
        return SUCCESS;
    }
}

结果:

②动态参数封装: 在运行期间提交的表单/ajax/url里面的参数数据可以做动态封装

1 动作类充当模型对象方式封装参数(不推荐使用)

    动作类action和模型model合为一体, 也就是说可以在动作类中定义要接收值的属性

这里使用form表单做测试:

form.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<form action="${pageContext.request.contextPath }/person/test2" method="post">
    <table>
        <tr>
            <td>ID</td>
            <td>
                <input type="text" name="id">
            </td>
        </tr>
        <tr>
            <td>名字</td>
            <td>
                <input type="text" name="name">
            </td>
        </tr>
        <tr>
            <td>性别</td>
            <td>
                <input type="radio" name="gender" value="1">男
                <input type="radio" name="gender" value="2">女
            </td>
        </tr>
        <tr>
            <td>地址</td>
            <td>
                <input type="text" name="address">
            </td>
        </tr>
    </table>
    <input type="submit" value="提交">
</form>
</body>
</html>

"struts.xml"配置文件:

<action name="test2" class="com.rl.action.PersonAction1" method="hello2">
            <result name="success">/success.jsp</result>
        </action>

action动作类代码:

package com.rl.action;

import com.opensymphony.xwork2.ActionSupport;

public class PersonAction1 extends ActionSupport{
    
    private Integer id;
    
    private String name;
    
    private Integer gender;
    
    private String address;
    
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String hello2(){
        System.out.println("id: "+id+"  姓名: "+name+"  性别: "+gender+"  地址: "+address);
        return SUCCESS;
    }
}

访问:

结果:

2 动作类和模型对象分离方式封装参数(推荐使用)

    第一种方式的耦合度太高了, action既是c层又是m层, 可读性差, 重用性差, 维护性差

新建一个Person类作为model:

package com.rl.model;

public class Person {

    private Integer id;
    
    private String name;
    
    private Integer gender;
    
    private String address;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

在action中定义Person类的对象用于接收参数:

package com.rl.model;

public class Person {

    private Integer id;
    
    private String name;
    
    private Integer gender;
    
    private String address;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

"struts.xml"配置文件:

<action name="test3" class="com.rl.action.PersonAction3" method="hello3">
            <result name="success">/success.jsp</result>
        </action>

form3.jsp: 这种方式对表单的要求是传参的name的值必须带有model类+"."

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<form action="${pageContext.request.contextPath }/person/test3" method="post">
    <table>
        <tr>
            <td>ID</td>
            <td>
                <input type="text" name="person.id">
            </td>
        </tr>
        <tr>
            <td>名字</td>
            <td>
                <input type="text" name="person.name">
            </td>
        </tr>
        <tr>
            <td>性别</td>
            <td>
                <input type="radio" name="person.gender" value="1">男
                <input type="radio" name="person.gender" value="2">女
            </td>
        </tr>
        <tr>
            <td>地址</td>
            <td>
                <input type="text" name="person.address">
            </td>
        </tr>
    </table>
    <input type="submit" value="提交">
</form>
</body>
</html>

访问:

结果:

3 模型驱动方式封装参数(推荐使用)

实现"com.opensymphony.xwork2.ModelDriven"接口

"struts.xml"配置文件:

<action name="test4" class="com.rl.action.PersonAction4" method="hello4">
            <result name="success">/success.jsp</result>
        </action>

动作类代码:

package com.rl.action;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.rl.model.Person;

/**
 * ModelDriven的泛型就是需要接收的对象的类
 * @author Administrator
 *
 */
public class PersonAction4 extends ActionSupport implements ModelDriven<Person>{
    
    /**
     * 必须手动new一个对象
     */
    private Person person = new Person();
    
    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }

    public String hello4(){
        System.out.println(person.getId()+"  "+person.getName()+"  "+person.getGender()+"  "+person.getAddress());
        return SUCCESS;
    }

    /**
     * 返回person对象即可
     */
    @Override
    public Person getModel() {
        return person;
    }
}

form4.jsp:

同form.jsp一样, 不需要"对象名"+"."的形式

访问:

结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值