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
在實踐後會發現,如果遇到引數非常多的情況,那麼就需要在Action類中寫非常多的屬性以及對應的get/set方法.所以這種方式不太可取.解決問題的方法必然是封裝一個JavaBean.這就用到了Strut2的第二種傳值方式--DomainModel<%@ 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>
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 給子組件下