一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Struts2學習筆記(5)-參數傳遞方法

Struts2學習筆記(5)-參數傳遞方法

2020-05-14 10:34meaijojo Java教程

本文主要介紹Struts2中參數傳遞方法,希望能給大家做一個參考。

參數傳遞即將參數傳輸到程序后臺中,后臺可能做一些處理,然后再將內容存入數據庫之類嗒!

參數傳遞的方法較多,一一說明如下。

1、Action中直接參數法

有如下的index.jsp文件

 

復制代碼 代碼如下:
<?xml version="1.0" encoding="GB18030" ?> 
<%@ page language="java" contentType="text/html; charset=GB18030" 
    pageEncoding="GB18030"%> 
 
<%  
String path = request.getContextPath(); 
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
%> 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> 
<base href="<%=basePath %>"/> 
<title>Insert title here</title> 
</head> 
<body> 
使用action屬性接收參數<a href="user/user!add?name=a&age=8">添加用戶</a> 
     
</body> 
</html>

 

對于其中的<a></a>來說,傳遞兩個參數至程序,一個是name,一個是age,在struts.xml中的配置如下:

 

復制代碼 代碼如下:
<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
    "http://struts.apache.org/dtds/struts-2.0.dtd"> 
 
<struts> 
    <constant name="struts.devMode" value="true" /> 
    <package name="user" extends="struts-default" namespace="/user"> 
         
        <action name="user" class="com.bjsxt.struts2.user.action.UserAction"> 
            <result>/user_add_success.jsp</result> 
        </action> 
    </package> 
</struts>

 

這時我們的UserAction該如何寫呢?范例如下:

 

復制代碼 代碼如下:
package com.bjsxt.struts2.user.action; 
 
import com.opensymphony.xwork2.ActionSupport; 
 
public class UserAction extends ActionSupport { 
     
    private String name; 
    private int age; 
     
    public String add() { 
        System.out.println("name=" + name); 
        System.out.println("age=" + age); 
        return SUCCESS; 
    } 
 
    public String getName() { 
        return name; 
    } 
 
    public void setName(String name) { 
        this.name = name; 
    } 
 
    public int getAge() { 
        return age; 
    } 
 
    public void setAge(int age) { 
        this.age = age; 
    } 
     
     
}

 

很簡單,就是定義了兩個屬性,注:這兩個屬性的set和get方法必須要寫,可以使用eclipse的快速生成方式,非常簡單。這樣上述程序在運行時就會打印出所要的結果

name=a和age=8。

有說明如下:第一,struts2會自動進行參數傳遞,這個過程無需我們參與;第二,struts傳遞參數時針對的是set和get方法,而不是name和age屬性,也就是說,假如我們修改其中的name為其他名稱,如username,但是方法仍然是setName和getName的話,對于整個功能的實現來說沒有任何區別,只是有點別扭而已;第三,也是最重要的一點,就是假如有很多的屬性,這樣的話我們就需要非常多的set和get方法,這是非常不方便的,因此引伸出了下面這種方式。

2、Action添加類對象法

這個時候我們1中的屬性都歸于一個類中,如User

 

復制代碼 代碼如下:
package com.bjsxt.struts2.user.model; 
 
public class User { 
    private String name; 
    private int age; 
    public String getName() { 
        return name; 
    } 
    public void setName(String name) { 
        this.name = name; 
    } 
    public int getAge() { 
        return age; 
    } 
    public void setAge(int age) { 
        this.age = age; 
    } 
}

 

這樣在Action類中的寫法就變得簡單了很多

 

復制代碼 代碼如下:
package com.bjsxt.struts2.user.action; 
 
import com.bjsxt.struts2.user.model.User; 
import com.opensymphony.xwork2.ActionSupport; 
 
public class UserAction extends ActionSupport { 
     
    private User user; 
 
    public String add() { 
        System.out.println("name=" + user.getName()); 
        System.out.println("age=" + user.getAge()); 
        return SUCCESS; 
    } 
 
    public User getUser() { 
        return user; 
    } 
 
    public void setUser(User user) { 
        this.user = user; 
    } 
     
}

 

注:此時我們不需要自己手動生成一個User對象,這個過程是由Struts2自動完成的。

并且此時的url也需要作下修改,即index中的<a></a>標簽作下修改:

 

復制代碼 代碼如下:
<?xml version="1.0" encoding="GB18030" ?> 
<%@ page language="java" contentType="text/html; charset=GB18030" 
    pageEncoding="GB18030"%> 
 
<%  
String path = request.getContextPath(); 
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
%> 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> 
<base href="<%=basePath %>"/> 
<title>Insert title here</title> 
</head> 
<body>  
使用Domain Model接收參數<a href="user/user!add?user.name=a&user.age=8">添加用戶</a> 
     
</body> 
</html>

 

修改成上述18行部分。

上面說明了下Struts2參數傳遞的兩種方法,其中第二種方法被稱為:DomainModel,域模型。即新建一個類,用于存放屬性。

下面說明另外一種方法,被稱為:ModelDriven,模型驅動。

它與第二種方法非常類似,其他都是一樣的,僅僅就是Action和訪問有區別,它的Action如下:

 

復制代碼 代碼如下:
package com.bjsxt.struts2.user.action; 
 
import com.bjsxt.struts2.user.model.User; 
import com.opensymphony.xwork2.ActionSupport; 
import com.opensymphony.xwork2.ModelDriven; 
 
public class UserAction extends ActionSupport implements ModelDriven<User>{ 
     
    private User user = new User(); 
     
    public String add() { 
        System.out.println("name=" + user.getName()); 
        System.out.println("age=" + user.getAge()); 
        return SUCCESS; 
    } 
 
    @Override 
    public User getModel() { 
        return user; 
    } 
     

 

我們可以從中看到,它實現了ModelDriven接口,并采用了泛型技術。采用這種方式Struts2不會自動的實例化一個對象,因此只能我們手動生成。它覆寫了ModelDriven接口的getModel()方法,它的作用就是返回一個類對象。

它的訪問是和第二種有區別的(與第一種方法一樣):

 

復制代碼 代碼如下:
使用ModelDriven接收參數<a href="user/user!add?name=a&age=8">添加用戶</a>

 

它并沒有采用user.name的方式,這也是為什么必須要new一個對象的原因。

這種方式的基本思想過程為:首先Action解析url,獲得其中的參數,然后進入Action中,發現此Action實現了一個ModelDriven接口,此時就調用ModelDriven接口的getModel方法,獲得類的對象,然后調用此類的set和get方法,將參數傳入。

此種方式體現了Struts2的MVC思想,M----Model,V----View,C----Controller,但是這種方式很少使用,我們使用最多的還是上面的第二種方式。

以上就是Struts2中參數傳遞方法的全部內容,希望能給大家一個參考,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91久久夜色精品国产九色 | 国产亚洲福利精品一区 | 邪恶肉肉全彩色无遮琉璃神社 | 成人免费体验区福利云点播 | 国内精品国语自产拍在线观看55 | 免费在线观看网址大全 | 久久一er精这里有精品 | 青青青手机视频 | 亚洲国产成人久久综合一区 | 504神宫寺奈绪大战黑人 | 女色在线观看免费视频 | 亚洲午夜精品久久久久久人妖 | gangbang日本| 91香蕉国产视频 | 398av影院视频在线 | 草久久网 | 丁香六月婷婷激情 | 天美传媒果冻传媒星空传媒 | 99久久精品免费看国产 | 波多野结衣同性系列698 | 国产成人久久精品一区二区三区 | 成人伊人亚洲人综合网站222 | 久久精品18 | 激情图片 激情小说 | 四虎国产精品免费久久麻豆 | 肥胖老寡妇做性 | bdsm中国精品调教 | 免费观看俄罗斯特黄特色 | 香蕉久久久久 | 欧美粗黑巨大gay | 91小视频在线观看免费版高清 | 亚洲精品色图 | 污污的动态图合集 | 国产不卡视频 | www.91在线视频 | 日韩亚洲欧美理论片 | 成人免费一区二区三区在线观看 | 精品一区二区三区高清免费观看 | 95在线观看精品视频 | 色色色色色色网 | 白丝校花被扒开双腿喷水小说 |