1. 程式人生 > >struts學習(四)—屬性封裝、模型驅動封裝和表示式封裝

struts學習(四)—屬性封裝、模型驅動封裝和表示式封裝

本文學習內容來自傳智部落格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;
}

@Override
public 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.表示式封裝可以把資料封裝到不同的物件中去。

相關推薦

struts學習()—屬性封裝模型驅動封裝表示式封裝

本文學習內容來自傳智部落格struts教程。 1.屬性封裝 作用: 直接把表單提交屬性封裝到action的屬性裡面 步驟: (1)在action中宣告成員變數,變數名稱和表單輸入項的名稱一樣 (2)生成變數的set方法。 缺

###struts模型驅動(必須new)能夠封裝【物件型別屬性屬性】.頁面傳參錯誤導致的問題:HTTP Status 500

問題詳情: HTTP Status 500 - could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.Constraint

【基於tensorflow的學習】經典卷積神經網路模型的儲存讀取

 CNN發展史: 1.經典卷積神經網路 以下僅列出關於CNN的深層次理解: 卷積層 tensorflow中卷積層的建立函式:_conv1 = tf.nn.conv2d(_input_r, tf.Variable(tf.random_normal([3, 3, 1, 6

c++學習(過載指標引用)

所謂過載就是:函式名相同,引數不同(包括型別、數量、順序不同) 當我們呼叫函式的時候編譯器能夠通過函式引數的數量或者型別或者順序不同來選擇要呼叫那個函式。但是不能通過返回值的不一樣來過載函式。 #include <iostream> using namesp

Struts2表單驗證模型驅動防重複提交資料回顯筆記整理

 剛學完一些零散的struts內建功能,做點筆記,就當回顧一遍,也便以後使用。 -------------------------------------------------------------------------------------------------

從零開始學習前端JAVASCRIPT — 4JavaScript基礎MathDate對象的介紹

日期格 3.6 一次函數 gety 位置 隨機 urn margin 開始 Math對象的介紹 1:Math對象 Math 對象用於執行數學任務。並不像 Date 和 String 那樣是對象的類,因此沒有構造函數 Math()。您無需創建它,通過把 Math 作為對

java——繼承封裝多態概念例子

pub int sta blog ima protect 參考資料 成員方法 order 一、封裝   java是面向對象的語言,為了讓類的內部數據不被隨意的訪問修改,我們會用訪問修飾符對其被訪問權限進行修飾。例如我們經常看見的實體類。裏面的成員變量我們就是用priva

jQuery的屬性設定CSS樣式設定DOM的寬高位置設定

屬性設定 新增和獲取屬性 //新增屬性 $("div").attr("names","li"); //獲取屬性 $("div").attr("names"); 給多個物件新增同一屬性,但是不同的值 $("div").attr("names",fun

spark學習記錄(七二次排序分組取TopN問題)

1.二次排序 例題:將兩列數字按第一列升序,如果第一列相同,則第二列升序排列 資料檔案:https://download.csdn.net/download/qq_33283652/10894807 將資料封裝成物件,對物件進行排序,然後取出value public class Se

MyBatis框架的學習()——Mapper.xml檔案中的輸入輸出對映以及動態sql

前面對MyBatis框架的學習中,我們對Mapper.xml對映檔案多少有些瞭解。本文將對Mapper.xml對映檔案作更加細緻的梳理,首先從Mapper.xml檔案中的輸入和輸出對映開始。本文案例程式碼的編寫是建立在前文MyBatis框架的學習(三)——Dao

cocos2D-X原始碼分析之從cocos2D-X學習OpenGL(20)----模型,網格材質

       openGL在cocos2d-x中的應用點,呼叫的api基本已經介紹的差不多了,這一篇介紹一些3d遊戲中的概念,它們也和底層有一些關係,也是遊戲中常用的一些封裝。       當我們要在螢幕上繪製簡單的圖形時,我們直接計算點的座標就可以,但是遊戲世界中經常有些複

Python學習筆記之生成器叠代器裝飾器

例如 () 特性 信息丟失 ati 如何判斷 常常 lse num 這篇文章主要介紹 Python 中幾個常用的高級特性,用好這幾個特性可以讓自己的代碼更加 Pythonnic 哦 1、生成器 什麽是生成器呢?簡單來說,在 Python 中一邊循環一邊計算的機制稱為 生成器

Struts-settergetter方法自動 ActionSupport類-屬性驅動+模型驅動

【setter、getter方法自動設定獲取】 屬於攔截器的功能 在TestAction類裡設定兩個屬性 bookId bookName並且聲稱setter、getter方法 public class TestAction implements Action { pri

struts2獲取表單數據之 屬性封裝 模型驅動 表達式封裝 對象封裝到list集合 對象封裝到map集合 五種方便的封裝方式

demo1 submit namespace auto nbsp return admin user pri 一、屬性封裝   屬性封裝是在action裏面設定屬性值,屬性名字一定要和表單中的name一樣,action中extends ActionSupport   dem

BOM學習筆記(一)開啟新連結種方式視窗屬性定時器

BOM:專門操作瀏覽器視窗的物件 1、window物件充當2個角色:       1. 全域性物件       2. 包含BOM常用物件   

學習理論模型選擇特徵選擇——斯坦福CS229機器學習個人總結(

這一份總結裡的主要內容不是演算法,是關於如何對偏差和方差進行權衡、如何選擇模型、如何選擇特徵的內容,通過這些可以在實際中對問題進行更好地選擇與修改模型。 1、學習理論(Learning theory) 1.1、偏差/方差(Bias/variance)

Struts模型驅動屬性驅動共同使用可能會遇到的問題

當模型驅動與屬性驅動共同使用時,我們可能會遇到屬性驅動獲取不到值的問題。例如,當我們的Action類繼承的模型驅動的泛型設定為ModelDriven<User>,並且Action類使用了User實體類裡面的成員變數作為屬性驅動。 Action類的部分程式碼(可

JAVA -- Struts模型驅動屬性驅動

1.屬性驅動請求一個action,它會把對應的action中屬性的名稱對應到表單的名稱上,並且呼叫set方法注入2.模型驅動ModelDriver(模型驅動):它把屬性名稱最終對映成一個User物件。在表單中直接用屬性,而不是物件.屬性的形式,這種方式比較麻煩。它繼承了Mod

【SSH學習】--Structs2模型驅動屬性驅動

兩種方式 When:當你從jsp介面調到action時, 屬性驅動 屬性驅動需要你在action中定義屬性,這些屬性就是jsp表單屬性,當你從jsp介面跳到action,struts的攔截器就會呼叫你的action的setxx方法,將你表單的屬性注入act

Struts2的模型驅動屬性驅動的理解

因為在struts1的版本中,屬性的攔截以及控制的處理是被封裝為兩個對立的ActionForm、Action來獲取HttpServerRequest的引數、控制訪問的MAPPING的。而在Struts2中我們可以直接通過Action來獲取請求引數,並把處理的資源對映返回給