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