• 属性驱动封装


    -------------------siwuxie095

       

       

       

       

       

       

       

    属性驱动封装

       

       

    1、Struts2 将数据封装分为两大类:

       

    1)一类被称为是 属性驱动

       

    2)一类被称为是 模型驱动

       

       

       

    2、属性驱动封装可以细分成两种:

       

    1)一种只需要提供属性的 set 方法即可(简称 属性封装

       

    2)一种可以通过表达式直接封装到对象中(简称 表达式封装

       

       

       

       

       

       

       

    (一)属性封装:提供属性的 set 方法

       

       

    1、在 Struts2 中可以直接在 Action 中定义各种 Java 基本数据

    类型的字段,使这些字段和表单数据相对应,并利用这些字段进

    数据传递

       

    「直接把表单数据封装到 Action 的属性中」

       

       

       

    2、具体步骤

       

    1)在 Action 的成员变量位置定义属性

       

    2)提供属性的 set 方法

       

    「属性名称要和表单输入项的 name 属性值一致」

       

       

       

    3、具体实现

       

    1)编写页面

       

    data.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">

    <title>表单</title>

    </head>

    <body>

    <form action="${pageContext.request.contextPath }/data.action" method="post">

    username:<input type="text" name="username"/>

    <br/>

    password:<input type="password" name="password"/>

    <br/>

    address:<input type="text" name="address"/>

    <br/>

    <input type="submit" value="提交"/>

    </form>

    </body>

    </html>

       

       

       

    2)编写 Action

       

    DataAction.java:

       

    package com.siwuxie095.action;

       

    import com.opensymphony.xwork2.ActionSupport;

       

       

    /**

    * 使用属性封装获取表单数据

    */

    public class DataAction extends ActionSupport {

    /*

    * (1) Action 的成员变量位置定义属性

    *

    * 属性名称要和表单输入项的 name 属性值一致

    */

    private String username;

    private String password;

    private String address;

    /*

    * (2) 提供属性的 set 方法

    *

    * 其实只需要提供 set 方法即可,因为

    * 是自动生成,所以顺便生成 get 方法

    */

    public String getUsername() {

    return username;

    }

    public void setUsername(String username) {

    this.username = username;

    }

       

    public String getPassword() {

    return password;

    }

       

    public void setPassword(String password) {

    this.password = password;

    }

       

    public String getAddress() {

    return address;

    }

       

    public void setAddress(String address) {

    this.address = address;

    }

       

       

    @Override

    public String execute() throws Exception {

    System.out.println(username+"-"+password+"-"+address);

    return NONE;

    }

    }

       

       

       

    3)配置 Action

       

    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>

    <package name="demo" extends="struts-default" namespace="/">

    <action name="data" class="com.siwuxie095.action.DataAction"></action>

    </package>

       

    </struts>

       

       

       

    4)访问路径

       

    http://localhost:8080/工程名/data.jsp

       

       

       

    4、问题与缺陷

       

    如果要表单数据很多,那么 Action 的属性也会变得很多,再加上

    属性有对应的 getter 和 setter 方法,从而导致 Action 的代码很

    庞大,再在 Action 中编写业务逻辑的代码时,会使 Action 非常

    臃肿,不够简洁

       

    「表单数据只是封装到属性中,并没有封装到对象中」

       

       

       

    5、解决方案

       

    把属性和对应的 getter 和 setter 方法从 Action 中提取出来,封

    装到实体类中,单独作为一个值对象

       

    该对象就是用来封装表单数据的,且可以在多个 Action 中使用

       

    「实体类封装的属性和表单的属性一一对应」

       

       

       

       

       

       

       

    (二)表达式封装:页面提供 OGNL 表达式

       

       

    1、表达式封装可以把表单数据直接封装到实体类对象

       

       

       

    2、具体步骤

       

    1)在 Action 中声明实体类对象

       

    2)提供实体类对象的 get 和 set 方法

       

    3)在表单输入项的 name 属性值处写 OGNL 表达式

       

       

       

    3、具体实现

       

    1)编写实体类

       

    User.java:

       

    package com.siwuxie095.entity;

       

       

    // User 实体类

    public class User {

       

    private String username;

    private String password;

    private String address;

    public String getUsername() {

    return username;

    }

    public void setUsername(String username) {

    this.username = username;

    }

    public String getPassword() {

    return password;

    }

    public void setPassword(String password) {

    this.password = password;

    }

    public String getAddress() {

    return address;

    }

    public void setAddress(String address) {

    this.address = address;

    }

    @Override

    public String toString() {

    return "User [username=" + username + ", password=" + password

    + ", address=" + address + "]";

    }

    }

       

       

       

    2)编写 Action

       

    DataxAction.java:

       

    package com.siwuxie095.action;

       

    import com.opensymphony.xwork2.ActionSupport;

    import com.siwuxie095.entity.User;

       

    /**

    * 使用表达式封装获取表单数据

    */

    public class DataxAction extends ActionSupport {

       

    /*

    * (1) Action 中声明实体类对象

    *

    * 注意:是声明,不是创建,即不需要 new

    */

    private User user;

    /*

    * (2) 提供实体类对象的 get set 方法

    */

    public User getUser() {

    return user;

    }

       

    public void setUser(User user) {

    this.user = user;

    }

       

    @Override

    public String execute() throws Exception {

    System.out.println(user);

    return NONE;

    }

    }

       

       

       

    3)配置 Action

       

    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>

    <package name="demo" extends="struts-default" namespace="/">

    <action name="datax" class="com.siwuxie095.action.DataxAction"></action>

    </package>

       

    </struts>

       

       

       

    4)编写页面

       

    datax.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">

    <title>表单</title>

    </head>

    <body>

    <!--

    (3) 在表单输入项的 name 属性值处写 OGNL 表达式

    user.username user,即 Action 中声明的实体类对象

    -->

    <form action="${pageContext.request.contextPath }/datax.action" method="post">

    username:<input type="text" name="user.username"/>

    <br/>

    password:<input type="password" name="user.password"/>

    <br/>

    address:<input type="text" name="user.address"/>

    <br/>

    <input type="submit" value="提交"/>

    </form>

    </body>

    </html>

       

       

       

    5)访问路径

       

    http://localhost:8080/工程名/datax.jsp

       

       

       

       

       

       

       

       

    【made by siwuxie095】

  • 相关阅读:
    javascript实现非递归--归并排序
    javascript实现二分查找
    深入javascript作用域链到闭包
    c++学习笔记2--constexpr,类型别名,auto
    用 Numba 加速 Python 代码
    Django1和2的区别
    Git的使用
    文件锁fcntl
    Https原理
    Flask-Login
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/7338742.html
Copyright © 2020-2023  润新知