1. 程式人生 > >Struts2的三種傳值方式

Struts2的三種傳值方式

1.普通的傳值方式

UserActionForCommonParam類

Action類接收三個引數,分別是id,username,content.

package com.struts.action;

public class UserActionForCommonParam {
    private int id;
    private String username;
    private String content;

    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

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

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
    
    // 從前臺頁面接收到引數後會在這個方法裡列印
    public String addUser() {
        System.out.println("ID: " + this.getId());
        System.out.println("Username: " + this.getUsername());
        System.out.println("Content: " + this.getContent());
        return "success";
    }
}

對應的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.enable.DynamicMethodInvocation" value="true"/>
    <constant name="struts.devMode" value="true"/>
    <package name="default" namespace="/" extends="struts-default">
        <action name="UserActionForCommonParam" class="com.struts.action.UserActionForCommonParam" method="addUser">
            <result name="success">/UserPage.jsp</result>
        </action>
    </package>
</struts>

前臺頁面UserPage.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>UserPage</title>
</head>
<body>
    <%--下面的Table用於提交引數(id,username,content)--%>
    <form action="UserActionForCommonParam" method="POST">
        <table border="1">
            <tr>
                <td>ID:</td>
                <td><input type="text" name="id"/></td>
            </tr>
            <tr>
                <td>Username:</td>
                <td><input type="text" name="username"/></td>
            </tr>
            <tr>
                <td>Content:</td>
                <td><input type="text" name="content"/></td>
            </tr>
            <tr>
                <td colspan="2" align="center">
                    <input type="submit" value="提交"/>
                </td>
            </tr>
        </table>
    </form>
    <br/>
    <%--下面的Table用於顯示傳遞回來id,username,content--%>
    <table border="1">
        <tr>
            <td>ID: </td>
            <td><input type="text" value="${id}"/></td>
        </tr>
        <tr>
            <td>Username: </td>
            <td><input type="text" value="${username}"/></td>
        </tr>
        <tr>
            <td>Content: </td>
            <td><input type="text" value="${content}"/></td>
        </tr>
    </table>
    <%--用於檢視ValueStack中的傳遞的值--%>
    <s:debug/>
</body>
</html>
在實踐後會發現,如果遇到引數非常多的情況,那麼就需要在Action類中寫非常多的屬性以及對應的get/set方法.所以這種方式不太可取.解決問題的方法必然是封裝一個JavaBean.這就用到了Strut2的第二種傳值方式--DomainModel

2.DomainModel傳值

首先要建立一個儲存的JavaBean

User類

把id,username,content封裝的到一個User類當中.

package com.struts.model;

public class User {
    private int id;
    private String username;
    private String content;

    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

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

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

UserActionForDomainModel類

package com.struts.action;

import com.opensymphony.xwork2.ActionSupport;
import com.struts.model.User;

public class UserActionForDomainModel extends ActionSupport{
    private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public String addUser() {
        System.out.println("ID: " + user.getId());
        System.out.println("Username: " + user.getUsername());
        System.out.println("Content: " + user.getContent());
        return "success";
    }
}

對應的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.enable.DynamicMethodInvocation" value="true"/>
    <constant name="struts.devMode" value="true"/>
    <package name="default" namespace="/" extends="struts-default">
        <action name="userForDomainModel" class="com.struts.action.UserActionForDomainModel" method="addUser">
            <result name="success">/UserPage.jsp</result>
        </action>
    </package>
</struts>

前臺頁面UserPage.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>UserPage</title>
</head>
<body>
    <%--要特別注意的是DomainModel的傳值方式必須要使用物件.引數方式進行賦值以及取值--%>
    <form action="userForDomainModel" method="POST">
        <table border="1">
            <tr>
                <td>ID:</td>
                <td><input type="text" name="user.id"/></td>
            </tr>
            <tr>
                <td>Username:</td>
                <td><input type="text" name="user.username"/></td>
            </tr>
            <tr>
                <td>Content:</td>
                <td><input type="text" name="user.content"/></td>
            </tr>
            <tr>
                <td colspan="2" align="center">
                    <input type="submit" value="提交"/>
                </td>
            </tr>
        </table>
    </form>
    <br/>
    <%--下面的Table用於顯示傳遞回來id,username,content--%>
    <table border="1">
        <tr>
            <td>ID: </td>
            <td><input type="text" value="${user.id}"/></td>
        </tr>
        <tr>
            <td>Username: </td>
            <td><input type="text" value="${user.username}"/></td>
        </tr>
        <tr>
            <td>Content: </td>
            <td><input type="text" value="${user.content}"/></td>
        </tr>
    </table>
    <%--用於檢視ValueStack中的傳遞的值--%>
    <s:debug/>
</body>
</html>
實際上User類不需要顯式的例項化,struts會自動幫你例項化,但前提條件是,傳值時需要使用物件.引數名的方式進行傳遞.

除了這種傳值方式外,struts2還提供另外一種傳值方式.

3.ModelDriven傳值

依然要建立User的JavaBean

User類

package com.struts.model;

public class User {
    private int id;
    private String username;
    private String content;

    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

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

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

UserActionForModelDriven類
package com.struts.action;

import com.opensymphony.xwork2.ModelDriven;
import com.struts.model.User;

public class UserActionForModelDriven implements ModelDriven<User>{
    private User user;

    public String addUser() {
        System.out.println("ID: " + user.getId());
        System.out.println("Username: " + user.getUsername());
        System.out.println("Content: " + user.getContent());
        return "success";
    }

    @Override
    public User getModel() {
        if (user == null) {
            user = new User();
        }
        return user;
    }
}
這種方式可以不用在Action類中編寫對應的get/set方法,但是需要例項化User類.

前臺UserPage.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>UserPage</title>
</head>
<body>
    <form action="userForModelDriven" method="POST">
        <table border="1">
            <tr>
                <td>ID:</td>
                <td><input type="text" name="id"/></td>
            </tr>
            <tr>
                <td>Username:</td>
                <td><input type="text" name="username"/></td>
            </tr>
            <tr>
                <td>Content:</td>
                <td><input type="text" name="content"/></td>
            </tr>
            <tr>
                <td colspan="2" align="center">
                    <input type="submit" value="提交"/>
                </td>
            </tr>
        </table>
    </form>
    <br/>
    <%--下面的Table用於顯示傳遞回來id,username,content--%>
    <table border="1">
        <tr><span id="transmark"></span>
            <td>ID: </td>
            <td><input type="text" value="${id}"/></td>
        </tr>
        <tr>
            <td>Username: </td>
            <td><input type="text" value="${username}"/></td>
        </tr>
        <tr>
            <td>Content: </td>
            <td><input type="text" value="${content}"/></td>
        </tr>
    </table>
    <%--用於檢視ValueStack中的傳遞的值--%>
    <s:debug/>
</body>
</html>

頁面還是和普通傳值一樣.

可以去ValueStack當中觀察引數的儲存,更透徹的理解Struts2的引數傳遞.

相關推薦

Struts2方式

1.普通的傳值方式 UserActionForCommonParam類 Action類接收三個引數,分別是id,username,content. package com.struts.action; public class UserActionForCommonPar

Struts2頁面到action的方式

private String username;  private String password;    public String getUsername() {   return username;  }  public void setUsername(String username) {   thi

struts2方式之1屬性

屬性傳值也就是普通的傳值方法 先總的說一下屬性傳值是什麼樣子的! 在jsp頁面直接寫就可以了,沒有什麼特殊的要求和servlet的jsp頁面一樣 在Action頁面定義要傳的值,建立get和set方法。可以直接用。 具體參見程式碼,我用myeclipse寫的 .jsp &

Activity之間的方式

*************************************** 第一種:Extras:額外的,附加的.在Intent中附加額外的訊息 //傳值 Intent intent = new Intent(this, XXXActivity.class); intent.pu

iOS類與類之間的方式

一代理方式 什麼是代理模式 傳入的物件,代替當前類完成了某一個功能,稱為代理模式. 實現代理有以下方法 在要傳值的類中 1> 宣告代理方法 2> 定義代理屬性 3> 在適當的時候呼叫代理方法 在要接受值的類中 1&g

ios常用的方式

總結我專案中常用的三種傳值方式 近期在研究Python,公司正好有Python專案,對於自己來說也算是橫向發展 1:Block傳值 場景:比如在同一個頁面(A)點選了型別,彈出新的頁面(B),這時候需要獲取新頁面點選的是哪個型別值,,所以就需要新頁

Ajax的方式[ie]

第一種 index.jsp讀取data.xml <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextP

Struts2頁面到action的幾方式

struts2中的Action接收表單傳遞過來的引數有幾種方法: 傳統的做法如,登陸表單login.jsp: <form action="login" method="post" name=

struct 複習 --- 方式

結構體複習 結構體幾種賦值方式: 1、 typedef struct structTest { int age; char *name } structTest; extern void testFunc(); int main(){ structTest test[] = {

vector作為引數的方式

vector作為引數的三種傳參方式 c++中常用的vector容器作為引數時,有三種傳參方式,分別如下 function1(std::vector<std::vector<int> > vec),傳值 function2(std::ve

GridViewControl頁面間方法

GridViewControl 單選框選中行頁面之間傳值 1. 第一種用構造方法傳值 FormGetDuty frm = new FormGetDuty (strdebugPeople, strCRAFTPLANID, "質檢推送按鈕"); f

ajax非同步提交的方式

                              ajax非同步提交的三種傳參方式   陣列傳參 Json傳

iOS頁面間幾方式

傳值方法 屬性 方法 代理 block 通知 單例 頁面間傳值有八大傳值方式,下面我就簡單介紹下頁面間常用的傳值方式,但對於每種方式的詳細介紹由於內容很多,我會把每種方式單獨列出作為一篇文章詳細介紹,本文不做詳細說明 屬性傳值 第二個介面(Det

shell指令碼的作用,shell指令碼變數的定義和方式【shell指令碼的學習筆記一】

轉載自:http://blog.csdn.net/u010317005/article/details/50890543為什麼要用指令碼語言?以Linux系統為例,linux系統裡面有很多個命令,指令碼可以是一個或者多個命令的集合,通過執行指令碼,達到既定的功能或者效果。sh

Jsp-方式、include指令和動作元素的區別

一、三種賦值方式 1.value 說明:最直接的賦值方式 value賦值<br/> <jsp:useBean id="ls" class="model.Employee" scope="session" /> <jsp:s

iOS 五方式

iOS 有五種傳值方式 一.屬性傳值 屬性傳值最為簡單,但是比較單一,只能從一個檢視傳至另一個檢視, 屬性傳值第一步需要用到什麼型別就定義什麼樣的屬性 新建兩個檢視控制器RootViewController和SecondViewController,從一個頁面傳至第二個頁面

C++中vector作為引數的方式

1 #include <iostream> 2 #include <vector> 3 4 using namespace std; 5 6 void function1(std::vector<std::vector<int> >

Vue的常用方式、父子、子父、非父子元件

Vue常用的三種傳值方式有:1.父傳子 2.子傳父 3.非父子傳值  父子元件的關係可以總結為 prop 向下傳遞,事件向上傳遞。父元件通過 prop 給子元件下發資料,子元件通過事件給父元件傳送訊息。 1. 父元件向子元件進行傳值 父元件: <temp

Vue2.0的常用方式、父子、子父、非父子元件

在Vue的框架開發的專案過程中,經常會用到元件來管理不同的功能,有一些公共的元件會被提取出來。這時必然會產生一些疑問和需求?比如一個元件呼叫另一個元件作為自己的子元件,那麼我們如何進行給子元件進行傳值呢?如果是電商網站系統的開發,還會涉及到購物車的選項,這時候就會涉及到非父子元件傳值的情況。當然你也可以

Vue2.0的常用方式、父子、子父、非父子組件

組件 inf rop 發送消息 scrip bug 監聽 bus class Vue常用的三種傳值方式有: 父傳子 子傳父 非父子傳值 引用官網的一句話:父子組件的關系可以總結為 prop 向下傳遞,事件向上傳遞。父組件通過 prop 給子組件下