說明:在頁面中輸入的都是字符串。而在Java在處理時習慣使用對象。需要將頁面的輸入的字符串轉換成java對象後然後再進行後續的處理。
例1:頁面上輸入的用戶信息。用戶名和密碼使用分號隔開。
頁面內容: user info: hello;world
結果輸出爲:username: hello passworld: world
a. 登錄界面userinfo.jsp
<h1>使用分號將用戶名和密碼分開</h1>
<formaction="userAction">
user info : <inputtype="text"name="user"/><br/>
<inputtype="submit"value="submit"/>
</form>
b. 定義待轉換的bean類User.
classUser{
//定義屬性名
//定義get(),set()方法。
}
c. 配置文件struts.xml.配置action對應的類
<actionname="userAction"class="com.ebuair.UserAction">
<resultname="success">/showuserinfo.jsp</result>
</action>
d. 新建com.ebuair.UserAction.(繼承ActionSupport類)
publicclass UserAction extends ActionSupport{
private User user; //注意這裏一定不能新建new User()對象
//生成get(),set()方法
//重寫execute()方法
}
e.定義類型轉換器com.ebuair.converter.UserConverter.
(繼承DefaultTyepeConverter)
重寫convertValue(Mapcontext,Object value,Class toType)
public classUserConverter extends DefaultTypeCoverter{
@override
convertValue(Map context,Object value,ClasstoType){
if(User.class == toType){//從頁面向後臺轉換}
else if(String.class = toType){//從後臺向頁面轉換}
}
}
e. 定義屬性文件。規則:必須在action包下。本例爲:com.ebuair
文件名爲action名-conversion.properties。
(這個也是開始學習時最容易出錯的地方)
本例爲:UserAction-conversion.properties
文件內容 待轉換的類對象=類型轉換器的所在的包路徑
本例爲:user= com.ebuair.converter.UserConverter.
類型轉換器可以直接繼承DefaultTypeConverter類,重寫convertValue()方法,可以實現類型轉換。還可以直接繼承StrutsTypeConverter類,重寫convertFromString(Map arg0,String[] arg1,Class args2)和converToString(Map arg0,Object arg1)
StrutsTypeConver對DefaultTypeConverter類的convertValuea()方法進行了封裝。
f.展示頁面:showuserinfo.jsp(使用)
<@ taglib prefix=”s” uri=”/struts-tags”>
<s:property value=”user”/>
例2.批量的類型轉換。
a. 登錄界面userinfos.jsp
<form action=”userActions”>
user info1: <input type=”text” name=”user”><br>
user info2: <input type=”text” name=”user”><br>
……
<input type=”submit” value=”submit”>
</form>
b. 配置sruts.xml。配置指定的action
<actionname=”userActions” class=”com.ebuair.UserAcions”>
<result name=”successs”>/showuserinfos.jsp</result>
</action>
c. 實現com.ebuair.UserAcions類 (繼承ActionSupport類)
publicclass UserActions extends ActionSupport{
List<User> user //注意不能使用new生成新的對象。
//生成set(),get()方法
//重寫execute()方法
}
d. 實現類轉換器com.ebuair.converter.UserActionsConverter
(繼承StrutsTypeConverter)
publicclass UserActionsConverter extends StrutsTypeConverter{
@override
public Object converFromString(Map context, String[]vaules, Class toClass){
//爲什麼不用判斷toClass==User.class
List<User> users = newArrayList<User>();
for(){ }
return users;
@override
publicString convertToString(Map contex,Object o){
List<User> users = (List<User>) o;
StringBuffer userinfo = new StringBuffer();
for(User user : users){
userinfo.append(“username:”).append(username).append(“password”).append(“password”);
}
return userinfo.toString();
}
}
}
e. 配置屬性文件。
在和Action類相同的包下定義文件
(本例爲在com.ebuair包下新建文件)
文件名稱爲Action類名-conversion.properties
(本例爲UserActions-conversion.propeties)
內容爲帶轉換的類名=類轉化器名()
(本例爲user=com.ebuair.converter.UserAciontsConverter)