程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Struts2進修筆記(5)-參數傳遞辦法

Struts2進修筆記(5)-參數傳遞辦法

編輯:關於JAVA

Struts2進修筆記(5)-參數傳遞辦法。本站提示廣大學習愛好者:(Struts2進修筆記(5)-參數傳遞辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是Struts2進修筆記(5)-參數傳遞辦法正文


參數傳遞行將參數傳輸到法式後台中,後台能夠做一些處置,然後再將內容存入數據庫之類嗒!

參數傳遞的辦法較多,逐個解釋以下。

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中參數傳遞辦法的全體內容,願望能給年夜家一個參考,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved