Struts2學(xué)習(xí)筆記(5)-參數(shù)傳遞方法
參數(shù)傳遞即將參數(shù)傳輸?shù)匠绦蚝笈_中,后臺可能做一些處理,然后再將內(nèi)容存入數(shù)據(jù)庫之類嗒!
參數(shù)傳遞的方法較多,一一說明如下。
1、Action中直接參數(shù)法
有如下的index.jsp文件
<%@ 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">添加用戶</a>
</body>
</html>
對于其中的<a></a>來說,傳遞兩個參數(shù)至程序,一個是name,一個是age,在struts.xml中的配置如下:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"
<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該如何寫呢?范例如下:
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的快速生成方式,非常簡單。這樣上述程序在運行時就會打印出所要的結(jié)果
name=a和age=8。
有說明如下:第一,struts2會自動進行參數(shù)傳遞,這個過程無需我們參與;第二,struts傳遞參數(shù)時針對的是set和get方法,而不是name和age屬性,也就是說,假如我們修改其中的name為其他名稱,如username,但是方法仍然是setName和getName的話,對于整個功能的實現(xiàn)來說沒有任何區(qū)別,只是有點別扭而已;第三,也是最重要的一點,就是假如有很多的屬性,這樣的話我們就需要非常多的set和get方法,這是非常不方便的,因此引伸出了下面這種方式。
2、Action添加類對象法
這個時候我們1中的屬性都歸于一個類中,如User
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類中的寫法就變得簡單了很多
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>標簽作下修改:
<%@ 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">添加用戶</a>
</body>
</html>
修改成上述18行部分。
上面說明了下Struts2參數(shù)傳遞的兩種方法,其中第二種方法被稱為:DomainModel,域模型。即新建一個類,用于存放屬性。
下面說明另外一種方法,被稱為:ModelDriven,模型驅(qū)動。
它與第二種方法非常類似,其他都是一樣的,僅僅就是Action和訪問有區(qū)別,它的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;
}
}
我們可以從中看到,它實現(xiàn)了ModelDriven接口,并采用了泛型技術(shù)。采用這種方式Struts2不會自動的實例化一個對象,因此只能我們手動生成。它覆寫了ModelDriven接口的getModel()方法,它的作用就是返回一個類對象。
它的訪問是和第二種有區(qū)別的(與第一種方法一樣):
它并沒有采用user.name的方式,這也是為什么必須要new一個對象的原因。
這種方式的基本思想過程為:首先Action解析url,獲得其中的參數(shù),然后進入Action中,發(fā)現(xiàn)此Action實現(xiàn)了一個ModelDriven接口,此時就調(diào)用ModelDriven接口的getModel方法,獲得類的對象,然后調(diào)用此類的set和get方法,將參數(shù)傳入。
此種方式體現(xiàn)了Struts2的MVC思想,M----Model,V----View,C----Controller,但是這種方式很少使用,我們使用最多的還是上面的第二種方式。
以上就是Struts2中參數(shù)傳遞方法的全部內(nèi)容,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Boot Hazelcast Caching 使用和配置詳解
這篇文章主要介紹了Spring Boot Hazelcast Caching 使用和配置詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09Java使用split分割無效獲取不到預(yù)期效果的解決辦法
這篇文章主要給大家介紹了關(guān)于Java使用split分割無效獲取不到預(yù)期效果的解決辦法,java的String類中有個split方法,這個是我們經(jīng)常使用到的,需要的朋友可以參考下2023-08-08SpringMVC中的SimpleUrlHandlerMapping用法詳解
這篇文章主要介紹了SpringMVC中的SimpleUrlHandlerMapping用法詳解,SimpleUrlHandlerMapping是Spring MVC中適用性最強的Handler Mapping類,允許明確指定URL模式和Handler的映射關(guān)系,有兩種方式聲明SimpleUrlHandlerMapping,需要的朋友可以參考下2023-10-10Spring之關(guān)于PropertyDescriptor的擴展剖析
這篇文章主要介紹了Spring之關(guān)于PropertyDescriptor的擴展剖析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07Java利用POI實現(xiàn)導(dǎo)入導(dǎo)出Excel表格示例代碼
最近工作中遇到一個需求,是需要導(dǎo)出數(shù)據(jù)到Excel表格里,所以寫個Demo測試一下,還是比較簡單的,現(xiàn)在分享給大家,有需要的朋友們可以參考借鑒,下面來一起看看吧。2016-10-10Java面向?qū)ο蟪绦蛟O(shè)計:繼承,多態(tài)用法實例分析
這篇文章主要介紹了Java面向?qū)ο蟪绦蛟O(shè)計:繼承,多態(tài)用法,結(jié)合實例形式分析了java繼承與多態(tài)的相關(guān)概念、原理、實現(xiàn)方法與操作注意事項,需要的朋友可以參考下2020-04-04Struts2+Hibernate實現(xiàn)數(shù)據(jù)分頁的方法
這篇文章主要介紹了Struts2+Hibernate實現(xiàn)數(shù)據(jù)分頁的方法,結(jié)合實例形式分析了Struts2結(jié)合Hibernate實現(xiàn)數(shù)據(jù)分頁的原理,步驟與相關(guān)實現(xiàn)代碼,需要的朋友可以參考下2016-03-03