欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Struts2學(xué)習(xí)筆記(5)-參數(shù)傳遞方法

 更新時(shí)間:2016年06月12日 11:53:57   作者:meaijojo  
本文主要介紹Struts2中參數(shù)傳遞方法,希望能給大家做一個(gè)參考。

參數(shù)傳遞即將參數(shù)傳輸?shù)匠绦蚝笈_(tái)中,后臺(tái)可能做一些處理,然后再將內(nèi)容存入數(shù)據(jù)庫(kù)之類(lèi)嗒!

參數(shù)傳遞的方法較多,一一說(shuō)明如下。

1、Action中直接參數(shù)法

有如下的index.jsp文件

復(fù)制代碼 代碼如下:
<?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" " <html xmlns=" <head> 
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> 
<base href="<%=basePath %>"/> 
<title>Insert title here</title> 
</head> 
<body> 
使用action屬性接收參數(shù)<a href="user/user!add?name=a&age=8">添加用戶(hù)</a> 
     
</body> 
</html>

對(duì)于其中的<a></a>來(lái)說(shuō),傳遞兩個(gè)參數(shù)至程序,一個(gè)是name,一個(gè)是age,在struts.xml中的配置如下:

復(fù)制代碼 代碼如下:

這時(shí)我們的UserAction該如何寫(xiě)呢?范例如下:

復(fù)制代碼 代碼如下:
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; 
    } 
     
     
}

很簡(jiǎn)單,就是定義了兩個(gè)屬性,注:這兩個(gè)屬性的set和get方法必須要寫(xiě),可以使用eclipse的快速生成方式,非常簡(jiǎn)單。這樣上述程序在運(yùn)行時(shí)就會(huì)打印出所要的結(jié)果

name=a和age=8。

有說(shuō)明如下:第一,struts2會(huì)自動(dòng)進(jìn)行參數(shù)傳遞,這個(gè)過(guò)程無(wú)需我們參與;第二,struts傳遞參數(shù)時(shí)針對(duì)的是set和get方法,而不是name和age屬性,也就是說(shuō),假如我們修改其中的name為其他名稱(chēng),如username,但是方法仍然是setName和getName的話(huà),對(duì)于整個(gè)功能的實(shí)現(xiàn)來(lái)說(shuō)沒(méi)有任何區(qū)別,只是有點(diǎn)別扭而已;第三,也是最重要的一點(diǎn),就是假如有很多的屬性,這樣的話(huà)我們就需要非常多的set和get方法,這是非常不方便的,因此引伸出了下面這種方式。

2、Action添加類(lèi)對(duì)象法

這個(gè)時(shí)候我們1中的屬性都?xì)w于一個(gè)類(lèi)中,如User

復(fù)制代碼 代碼如下:
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類(lèi)中的寫(xiě)法就變得簡(jiǎn)單了很多

復(fù)制代碼 代碼如下:
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; 
    } 
     
}

注:此時(shí)我們不需要自己手動(dòng)生成一個(gè)User對(duì)象,這個(gè)過(guò)程是由Struts2自動(dòng)完成的。

并且此時(shí)的url也需要作下修改,即index中的<a></a>標(biāo)簽作下修改:

復(fù)制代碼 代碼如下:
<?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" " <html xmlns=" <head> 
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> 
<base href="<%=basePath %>"/> 
<title>Insert title here</title> 
</head> 
<body>  
使用Domain Model接收參數(shù)<a href="user/user!add?user.name=a&user.age=8">添加用戶(hù)</a> 
     
</body> 
</html>

修改成上述18行部分。

上面說(shuō)明了下Struts2參數(shù)傳遞的兩種方法,其中第二種方法被稱(chēng)為:DomainModel,域模型。即新建一個(gè)類(lèi),用于存放屬性。

下面說(shuō)明另外一種方法,被稱(chēng)為:ModelDriven,模型驅(qū)動(dòng)。

它與第二種方法非常類(lèi)似,其他都是一樣的,僅僅就是Action和訪問(wèn)有區(qū)別,它的Action如下:

復(fù)制代碼 代碼如下:
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; 
    } 
     

我們可以從中看到,它實(shí)現(xiàn)了ModelDriven接口,并采用了泛型技術(shù)。采用這種方式Struts2不會(huì)自動(dòng)的實(shí)例化一個(gè)對(duì)象,因此只能我們手動(dòng)生成。它覆寫(xiě)了ModelDriven接口的getModel()方法,它的作用就是返回一個(gè)類(lèi)對(duì)象。

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

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

它并沒(méi)有采用user.name的方式,這也是為什么必須要new一個(gè)對(duì)象的原因。

這種方式的基本思想過(guò)程為:首先Action解析url,獲得其中的參數(shù),然后進(jìn)入Action中,發(fā)現(xiàn)此Action實(shí)現(xiàn)了一個(gè)ModelDriven接口,此時(shí)就調(diào)用ModelDriven接口的getModel方法,獲得類(lèi)的對(duì)象,然后調(diào)用此類(lèi)的set和get方法,將參數(shù)傳入。

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

以上就是Struts2中參數(shù)傳遞方法的全部?jī)?nèi)容,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring Boot Hazelcast Caching 使用和配置詳解

    Spring Boot Hazelcast Caching 使用和配置詳解

    這篇文章主要介紹了Spring Boot Hazelcast Caching 使用和配置詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • Java使用split分割無(wú)效獲取不到預(yù)期效果的解決辦法

    Java使用split分割無(wú)效獲取不到預(yù)期效果的解決辦法

    這篇文章主要給大家介紹了關(guān)于Java使用split分割無(wú)效獲取不到預(yù)期效果的解決辦法,java的String類(lèi)中有個(gè)split方法,這個(gè)是我們經(jīng)常使用到的,需要的朋友可以參考下
    2023-08-08
  • SpringBoot與Angular2的集成示例

    SpringBoot與Angular2的集成示例

    本篇文章主要介紹了SpringBoot與Angular2的集成示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • SpringMVC中的SimpleUrlHandlerMapping用法詳解

    SpringMVC中的SimpleUrlHandlerMapping用法詳解

    這篇文章主要介紹了SpringMVC中的SimpleUrlHandlerMapping用法詳解,SimpleUrlHandlerMapping是Spring MVC中適用性最強(qiáng)的Handler Mapping類(lèi),允許明確指定URL模式和Handler的映射關(guān)系,有兩種方式聲明SimpleUrlHandlerMapping,需要的朋友可以參考下
    2023-10-10
  • Spring之關(guān)于PropertyDescriptor的擴(kuò)展剖析

    Spring之關(guān)于PropertyDescriptor的擴(kuò)展剖析

    這篇文章主要介紹了Spring之關(guān)于PropertyDescriptor的擴(kuò)展剖析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java必學(xué)必會(huì)之GUI編程

    java必學(xué)必會(huì)之GUI編程

    這篇文章主要為大家詳細(xì)介紹了java GUI編程,對(duì)于GUI編程小編也不是很了解,通過(guò)這篇文章和大家一起學(xué)習(xí)GUI編程,感興趣的小伙伴們可以參考一下
    2015-12-12
  • Java利用POI實(shí)現(xiàn)導(dǎo)入導(dǎo)出Excel表格示例代碼

    Java利用POI實(shí)現(xiàn)導(dǎo)入導(dǎo)出Excel表格示例代碼

    最近工作中遇到一個(gè)需求,是需要導(dǎo)出數(shù)據(jù)到Excel表格里,所以寫(xiě)個(gè)Demo測(cè)試一下,還是比較簡(jiǎn)單的,現(xiàn)在分享給大家,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。
    2016-10-10
  • Java面向?qū)ο蟪绦蛟O(shè)計(jì):繼承,多態(tài)用法實(shí)例分析

    Java面向?qū)ο蟪绦蛟O(shè)計(jì):繼承,多態(tài)用法實(shí)例分析

    這篇文章主要介紹了Java面向?qū)ο蟪绦蛟O(shè)計(jì):繼承,多態(tài)用法,結(jié)合實(shí)例形式分析了java繼承與多態(tài)的相關(guān)概念、原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下
    2020-04-04
  • Struts2+Hibernate實(shí)現(xiàn)數(shù)據(jù)分頁(yè)的方法

    Struts2+Hibernate實(shí)現(xiàn)數(shù)據(jù)分頁(yè)的方法

    這篇文章主要介紹了Struts2+Hibernate實(shí)現(xiàn)數(shù)據(jù)分頁(yè)的方法,結(jié)合實(shí)例形式分析了Struts2結(jié)合Hibernate實(shí)現(xiàn)數(shù)據(jù)分頁(yè)的原理,步驟與相關(guān)實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2016-03-03
  • Java的Hibernate框架中的基本映射用法講解

    Java的Hibernate框架中的基本映射用法講解

    映射是Hibernate框架操作數(shù)據(jù)庫(kù)數(shù)據(jù)的重要特性之一,這里我們來(lái)看一下Java的Hibernate框架中的基本映射用法講解,包括最基本的單向一對(duì)一與多對(duì)一映射關(guān)系等:
    2016-07-07

最新評(píng)論