Struts2類型轉換器

不管我們用什麼框架,前端發到後臺的請求參數都是字符串類型的,所以後臺必須要將這些字符串轉化成我們要用的類型。Struts2提供了很強的類型轉換機制,並且提供了很好的擴展性。像常用的基本類型,都能通過Struts2內置的轉換器自動轉換。

內置裝換器

<form action="helloworld.action" method="get">
    年齡:<input name="age" type="text">
    <input type="submit" value="提交">
</form>

比如我們通過上面的表單把年齡發送到後端,後臺常規的做法是將獲取的年齡字符串轉爲整形int,而struts2框架不需要你去轉換類型,它自動幫我們做了。

package action;

import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport {

    private int age;
    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }       
}

當表單數據提交到上面Action的時候,自動將age轉換成int類型了。

自定義轉換器

有這樣一個Person類:

package pojo;

public class Person {
    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;
    }


}

當前臺直接輸入:“張三,21”,我們要自動創建一個Person,並將“張三”賦值給name屬性,“21”賦值給age屬性

首先,我們編寫Action類:

package action;

import com.opensymphony.xwork2.ActionSupport;

import pojo.Person;
public class HelloWorldAction extends ActionSupport {

    private Person p;
    @Override
    public String execute() throws Exception {
        System.out.println("執行Action");
        return SUCCESS;
    }
    public Person getP() {
        return p;
    }
    public void setP(Person p) {
        this.p = p;
    }
}

編寫自定義類型轉換器。

自定義類型轉換器繼承StrutsTypeConverter類,該類是TypeConverter接口的實現類,它的兩個抽象方法必須實現

package converter;

import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

import pojo.Person;

public class PersonConverter extends StrutsTypeConverter {

    @Override
    public Object convertFromString(Map arg0, String[] arg1, Class arg2) {

        if(arg1.length>0){
            String s=arg1[0];
            String[] personArr=s.split(",");
            Person p=new Person();
            p.setName(personArr[0]);
            p.setAge(Integer.parseInt(personArr[1]));
            return p;
        }else{
            return null;
        }

    }
    @Override
    public String convertToString(Map arg0, Object arg1) {

        if(arg1 instanceof Person){
            return arg1.toString();
        }else{
            return "";
        }

    }

}

註冊自定義裝換器
在Action的包中創建HelloWorldAction-conversion.properties,並加上p=converter.PersonConverter
新建相關頁面並修改struts.xml文件

<--index.jsp-->

<form action="helloworld.action" method="get">
        <input name="p" type="text">
        <input type="submit" value="提交">
    </form>
<--result.jsp-->
<p>${person.name}你好,你今年 ${person.age} 歲</p> 

結果:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章