struts学习(四)—属性封装、模型驱动封装和表达式封装

来源:互联网 发布:apmserv php升级5.6 编辑:程序博客网 时间:2024/06/05 17:16

本文学习内容来自传智博客struts教程。

1.属性封装

作用:
直接把表单提交属性封装到action的属性里面
步骤:
(1)在action中声明成员变量,变量名称和表单输入项的名称一样
(2)生成变量的set方法。
缺点:
数据只是放在属性中,并没有放到对象中去。

(1)action类:

package data;import com.opensymphony.xwork2.ActionSupport;public class DataDemo1Action extends ActionSupport {    private String username;    private String password;    private String address;    public String execute() throws Exception {        System.out.println("username:"+username+"password:"+password+"address:"+address);        return NONE;    }    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;    }}

(2)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="demo1" extends="struts-default" namespace="/">        <action name="book" class="action.BookAction">            <!-- chain: 转发 ,页面会发生改变,网址不发生改变,仍然为 http://127.0.0.1:8080/strutslearn2All/book -->            <result name="success" type="chain">orders</result>        </action>        <action name="orders" class="action.OrdersAction">            <result name="success">/HelloOrder.jsp</result>        </action>    </package>    <package name="demo2" extends="struts-default" namespace="/">        <action name="data1" class="data.DataDemo1Action"></action>    </package></struts>

(3)data1.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"    pageEncoding="ISO-8859-1"%><!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=ISO-8859-1"><title>Insert title here</title></head><body>   <form action="${pageContext.request.contextPath}/data1.action" method="post">      username:<input type="text" name="username"/>      <br/>      password:<input type="text" name="password"/>      <br/>      address:<input type="text" name="address"/>      <br/>      <input type="submit" value="submit"/>    </form></body></html>

2.模型驱动封装

作用:
使用模型驱动封装,可以直接把表单属性封装到实体类对象里面
实现步骤:
(1)action实现接口ModelDriven
(2)实现接口里面的getModel()方法
把创建对象返回
(3)在action里面创建实体类对象
要求:
表单输入项的name属性值和实体类属性名称一样。

(1)action类:

  package data;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;import entity.User;public class DataDemo2Action extends ActionSupport implements ModelDriven<User> {    //创建对象    private User user = new User();    public String execute() throws Exception {        System.out.println(user);        return NONE;    }    @Override    public User getModel() {        return user;    }}

(2)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="demo1" extends="struts-default" namespace="/">        <action name="book" class="action.BookAction">            <!-- chain: 转发 ,页面会发生改变,网址不发生改变,仍然为 http://127.0.0.1:8080/strutslearn2All/book -->            <result name="success" type="chain">orders</result>        </action>        <action name="orders" class="action.OrdersAction">            <result name="success">/HelloOrder.jsp</result>        </action>    </package>    <package name="demo2" extends="struts-default" namespace="/">        <action name="data2" class="data.DataDemo2Action"></action>    </package></struts>

(3)data2.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"    pageEncoding="ISO-8859-1"%><!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=ISO-8859-1"><title>Insert title here</title></head><body>     <form action="${pageContext.request.contextPath}/data2.action" method="post">      username:<input type="text" name="username"/>      <br/>      password:<input type="text" name="password"/>      <br/>      address:<input type="text" name="address"/>      <br/>      <input type="submit" value="submit"/>    </form></body></html>

(4)实体类:

package entity;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;    }}

3.表达式封装

作用
使用表达式封装可以将表单数据封装到实体类里面
步骤
1.在action中声明实体类
2.生成实体类变量的set方法
3.在表单输入项的name属性值里面写表达式形式。

(1)action类

package data;import com.opensymphony.xwork2.ActionSupport;import entity.Book;import entity.User;public class DataDemo3Action extends ActionSupport {private User user;    private Book book;public Book getBook() {return book;}public void setBook(Book book) {this.book = book;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}@Overridepublic String execute() throws Exception { System.out.println(user);System.out.println(book);return NONE;}}

(2)book实体类

package entity;public class Book {    private String bookname;    public String getBookname() {        return bookname;    }    public void setBookname(String bookname) {        this.bookname = bookname;    }}

(3)dat3.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"    pageEncoding="ISO-8859-1"%><!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=ISO-8859-1"><title>Insert title here</title></head><body>    <form action="${pageContext.request.contextPath}/data3.action" method="post">        username:<input type="text" name="user.username" />        <br/>         password:<input type="text" name="user.password" />         <br/>         address:<input type="text" name="user.address" />         <br/>         bookname:<input type="text" name="book.bookname"/>        <br/>        <input type="submit" value="submit" />    </form></body></html>

(4)struts文件

<?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="demo1" extends="struts-default" namespace="/">        <action name="book" class="action.BookAction">            <!-- chain: 转发 ,页面会发生改变,网址不发生改变,仍然为 http://127.0.0.1:8080/strutslearn2All/book -->            <result name="success" type="chain">orders</result>        </action>        <action name="orders" class="action.OrdersAction">            <result name="success">/HelloOrder.jsp</result>        </action>    </package>    <package name="demo2" extends="struts-default" namespace="/">        <action name="data3" class="data.DataDemo3Action"></action>    </package></struts>

4.代码总体架构

这里写图片描述

4.使用以上封装要注意的问题

(1)同一个action中,不能同时使用属性封装和模型驱动封装获取同一个表单数据。如果同时使用,则框架只会使用模型驱动。

(2)模型驱动与表达式封装的不同:
1.使用模型驱动只能把数据封装到一个实体类对象里面。
在一个action里面不能把模型驱动封装到不同的实体类对象里面。
2.表达式封装可以把数据封装到不同的对象中去。

0 0
原创粉丝点击