Struts2接受參數

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的接受參數

發佈了22 篇原創文章 · 獲贊 23 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章