不管我們用什麼框架,前端發到後臺的請求參數都是字符串類型的,所以後臺必須要將這些字符串轉化成我們要用的類型。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>
結果: