Struts2 是一個相當強大的Java Web開源框架,是一個基於POJO的Action的MVC Web框架。它基於當年的Webwork和XWork框架,繼承其優點,同時做了相當的改進。Struts2現在在Java Web開發界的地位可以說是大紅大紫,從開發人員的角度來分析,Struts2之所以能夠如此的深入開發人員之心,與其優良的設計是分不開的。
Struts2他的優點,在我另一篇博客上面寫到過,我們這裏主要是講一下從頁面上取值,也就是接受參數
Struts2接受參數的方式有四種
1.使用Action的屬性進行接受參數
2.使用DomainModel接受參數
3.使用ModelDriven接受參數
4.使用request接受參數
我相信大家對request接受參數都已經用的滾瓜爛熟了,我們這裏不做講解,我們在這裏配置的相關環境都是不變的
第一步:創建web項目,搭建Struts2開發環境
第二步:在web.xml 進行struts2的過濾器的配置
第三步:創建stuts.xml 進行關係的映射
第四步:創建一個實體類Action,並繼承com.opensymphony.xwork2.ActionSupport
第五步:創建相關方法
第六步:進行頁面的編輯,
第七步:測試
下面直接上代碼:
Struts的核心包
web.xml的配置:
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
testaction類的創建:
import com.opensymphony.xwork2.ActionSupport;
public class testAction extends ActionSupport {
//Action屬性進取值
//對屬性 要進行生成get() set方法
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
//定義前臺請求的方法 進行數據的請求
public String Login(){
System.out.println(name);
System.out.println(age);
//返回值 進行頁面的跳轉
return "ok";
}
}
struts.xml 配置
<!--聲明xml的版本和文件編碼格式-->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- struts2的action必須放在一個指定的包空間下定義 -->
<package name="pk" extends="struts-default" namespace="/">
<!-- 定義處理請求URL爲login.action的Action -->
<action name="Login" class="action.testAction">
<!-- 定義處理結果字符串和資源之間的映射關係 -->
<result name="ok">/ok.jsp</result>
</action>
</package>
</struts>
jsp頁面的設計
<body>
<form action="Login!Login" method="post">
用戶名:<input type="text" name="name"> <br/><br/>
年齡:<input type="text" name="age"><br/><br/>
<input type="submit" value="提交"/>
</form>
</body>
這就是action屬性進行取值
大家都知道Java是一種面向對象的一種語言,我們進行取值,我們可以通過進行面向對象進行處理 ,就是我們前面說的 DomainModel接受參數的方法進行接受參數,
在這裏我們就只是修改一下Action
首先我們對接受的對象進行封裝成一個實體類
public class UserInfo {
private String name;
private Integer age;
public String getAge() {
return age;
}
public void setId(String age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
testAction裏面的變化
import com.opensymphony.xwork2.ActionSupport;
public class testAction extends ActionSupport {
private UserInfo user;
public UserInfo getUser() {
return user;
}
public void setUser(UserInfo user) {
this.user = user;
}
//定義前臺請求的方法 進行數據的請求
public String Login(){
System.out.println(user.getName);
System.out.println(user.getAge);
//返回值 進行頁面的跳轉
return "ok";
}
}
頁面不做任何改變
我們在這裏講說一下第三種接受參數了 ModeDriven,這是我個人比較建議的一種方法進行接受參數
這裏注意一下 ,這裏我們的還是需要定義實體類,但是在改變的地方在Action中
首先我們建立的Action不僅僅需要繼承AcrtionSupport,而且還需要實現接口ModelDriver並且要實現裏面的getModel()方法,在方法中返回你要的對象,其餘地方不做任何改變
public class LoginAction extends ActionSupport implements ModelDriven<UserInfo>{
private static final long serialVersionUID = 7199807303646261718L;
//注意這裏需要new一個對象
private UserInfo user=new UserInfo();
public String Login(){
System.out.println(user.getName()+"=="+user.getPassword());
return "ok";
}
@Override
public UserInfo getModel() {
// TODO Auto-generated method stub
return user;
}
}
在這裏我們把接受參數的方法都提了一下,前面也說了,這裏不對request取值的方法進行說明,我們建議用後面一種;
在這裏可能有人有疑問了,如果我們的實體類是List的集合我們怎麼去接受參數,在這裏我們也進行提一下,這裏直接上代碼了
實體類:
userInfo 實體類:
public class UserInfo {
private int id;
private String name;
private String password;
private List<String> aihao;
private List<Dome> listDome;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public List<String> getAihao() {
return aihao;
}
public void setAihao(List<String> aihao) {
this.aihao = aihao;
}
public List<Dome> getListDome() {
return listDome;
}
public void setListDome(List<Dome> listDome) {
this.listDome = listDome;
}
}
Dome實體類
public class Dome {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
Action中:
public class testAction extends ActionSupport implements ModelDriven<UserInfo>{
private static final long serialVersionUID = 7199807303646261718L;
private UserInfo user=new UserInfo();
public String Login(){
System.out.println(user.getName()+"=="+user.getPassword());
//集合取值
System.out.println(user.getAihao().get(0));
System.out.println(user.getAihao().get(1));
//集合對象取值
System.out.println(user.getListDome().get(0).getName()+"=="+user.getListDome().get(1).getAge());
return "ok";
}
@Override
public UserInfo getModel() {
// TODO Auto-generated method stub
return user;
}
}
頁面:
<body>
<form action="Login!Login" method="post">
用戶名:<input type="text" name="name"> <br/><br/>
年齡:<input type="text" name="password"><br/><br/>
愛好1:<input type="text" name="aihao[0]"><br/><br/>
愛好2:<input type="text" name="aihao[1]"><br/><br/>
名字:<input type="text" name="listDome[0].name"> <br><br>
年齡:<input type="text" name="listDome[1].age"/> <br><br>
<input type="submit" value="提交"/>
</form>
</body>
這就是Struts的接受參數