7.1.2 ? List 集合類型數據類型轉換功能
技術要點
本節代碼具體介紹包含多個 Java 對象的 List 集合類型如何進行類型轉換。
List 集合類型類型轉換 Action 中使用方式。
List 集合類型類型轉換在視圖界面的使用方式。
演示代碼
使用的 Action 文件:
- <!----------------文件名:AddMaterialAction.java------------------> ??
- public ? class ?AddMaterialAction? extends ?ActionSupport?{ ??
- ????????? private ?List<Material>?materialList;?? ??
- ? ??
- ????????? public ?String?execute()? throws ?Exception?{ ??
- ??????????????????? return ?SUCCESS; ??
- ?????????} ??
- ??
- ????????? public ?List<Material>?getMaterialList()?{ ??
- ??????????????????? return ?materialList; ??
- ?????????} ??
- ? ??
- ????????? public ? void ?setMaterialList(List<Material>?materialList)?{ ??
- ??????????????????? this .materialList?=?materialList; ??
- ?????????} ??
- }??
<!----------------文件名:AddMaterialAction.java------------------> public class AddMaterialAction extends ActionSupport { private List<Material> materialList; public String execute() throws Exception { return SUCCESS; } public List<Material> getMaterialList() { return materialList; } public void setMaterialList(List<Material> materialList) { this.materialList = materialList; } }
?
配置文件中的導航定義:
- <!-----------------文件名:struts.xml-----------------> ??
- <!--?Action所在包定義?--> ??
- ?????????< package ?name= "C07.1.2" ? extends = "struts-default" ?>?????????????? ??
- ???????????????????<action?name= "addMaterial" ??
- ???????????????????????????? class = "com.action.AddMaterialAction" > ??
- ????????????????????????????<result?name= "input" >/jsp/addMaterial.jsp</result> ??
- ????????????????????????????<result?name= "success" >/jsp/showMaterial.jsp</result> ??
- ???????????????????</action> ??
- ?????????</ package >??
<!-----------------文件名:struts.xml-----------------> <!-- Action所在包定義 --> <package name="C07.1.2" extends="struts-default" > <action name="addMaterial" class="com.action.AddMaterialAction"> <result name="input">/jsp/addMaterial.jsp</result> <result name="success">/jsp/showMaterial.jsp</result> </action> </package>
?
指定 List 類型中元素是具體何種對象屬性文件
- <!----------文件名:AddMaterialAction-conversion.properties---------------> ??
- #集合屬性-List類型 ??
- Element_materialList=com.model.Material??
<!----------文件名:AddMaterialAction-conversion.properties---------------> #集合屬性-List類型 Element_materialList=com.model.Material
?
類型轉換的數據輸入 JSP 文件:
- <!-------------------文件名:addMaterial.jsp--------------------> ??
- ………… ??
- ?????????<!--?材料輸入表單?--> ??
- ???????????????????<table> ??
- ????????????????????????????<s:form?id= "materialForm" ?action= "addMaterial" ?theme= "simple" > ??
- ????????????????????????????<table> ??
- ????????????????????????????<tr> ??
- ????????????????????????????<td>材料名</td> ??
- ????????????????????????????<td>價格</td> ??
- ????????????????????????????<td>庫存量</td> ??
- ????????????????????????????<td>過期日期</td> ??
- ????????????????????????????</tr> ??
- ????????????????????????????<s:iterator?value= "new?int[4]" ?status= "m" > ??
- ????????????????????????????<tr> ??
- ????????????????????????????<td><s:textfield?name= "%{'materialList['+#m.index+'].material'}" ?/></td> ??
- ????????????<td><s:textfield?name= "%{'materialList['+#m.index+'].bid'}" ?/></td> ??
- ????????????<td><s:textfield?name= "%{'materialList['+#m.index+'].mount'}" ?/></td> ??
- ????????????<td><s:datetimepicker?name= "%{'materialList['+#m.index+'].expireDate'}" ?/></td> ??
- ????????????????????????????</tr> ??
- ????????????????????????????</s:iterator> ??
- ????????????????????????????<tr> ??
- ????????????????????????????<td?colspan= "4" ><s:submit?value= "提交" ></s:submit> ??
- ????????????????????????????</tr> ??
- ????????????????????????????</table> ??
- ????????????????????????????</s:form> ??
- ???????????????????</table>??? ??
- …………??
<!-------------------文件名:addMaterial.jsp--------------------> ………… <!-- 材料輸入表單 --> <table> <s:form id="materialForm" action="addMaterial" theme="simple"> <table> <tr> <td>材料名</td> <td>價格</td> <td>庫存量</td> <td>過期日期</td> </tr> <s:iterator value="new int[4]" status="m"> <tr> <td><s:textfield name="%{'materialList['+#m.index+'].material'}" /></td> <td><s:textfield name="%{'materialList['+#m.index+'].bid'}" /></td> <td><s:textfield name="%{'materialList['+#m.index+'].mount'}" /></td> <td><s:datetimepicker name="%{'materialList['+#m.index+'].expireDate'}" /></td> </tr> </s:iterator> <tr> <td colspan="4"><s:submit value="提交"></s:submit> </tr> </table> </s:form> </table> …………
?
類型轉換的顯示數據 JSP 文件:
- <!--------------------文件名:showMaterial.jsp----------------> ??
- ………… ??
- ????????????????<!--?材料數據顯示?--> ??
- ????????<table> ??
- ????????????<tr> ??
- ????????????<td>材料名</td> ??
- ????????????<td>價格</td> ??
- ????????????<td>庫存量</td> ??
- ????????????<td>過期日期</td> ??
- ????????????</tr> ??
- ????????????<s:iterator?value= "materialList" ?status= "m" > ??
- ????????????<tr> ??
- ????????????<td><s:property?value= "material" ?></s:property></td> ??
- ????????????<td><s:property?value= "bid" ?></s:property></td> ??
- ????????????<td><s:property?value= "mount" ?></s:property></td> ??
- ????????????<td><s:property?value= "expireDate" ?></s:property></td> ??
- ????????????</tr> ??
- ????????????</s:iterator> ??
- ?????????</table>??????????? ??
- …………??
<!--------------------文件名:showMaterial.jsp----------------> ………… <!-- 材料數據顯示 --> <table> <tr> <td>材料名</td> <td>價格</td> <td>庫存量</td> <td>過期日期</td> </tr> <s:iterator value="materialList" status="m"> <tr> <td><s:property value="material" ></s:property></td> <td><s:property value="bid" ></s:property></td> <td><s:property value="mount" ></s:property></td> <td><s:property value="expireDate" ></s:property></td> </tr> </s:iterator> </table> …………
?
數據輸入如圖 7.3 。
?
圖 7.3 ? 多個 material 對象數據輸入(組合成 List 集合類型)
顯示數據如圖 7.4 。請注意各種 Java 類型數據在顯示頁面和輸入頁面的格式和顯示不同之處。
?
圖 7.4 ? 多個 material 對象數據顯示
代碼解釋
( 1 )和上一小節示例相比。本示例雖然輸入的也是 Material 對象,不過卻是多個 Material 對象輸入。這里頁面上顯示的是一共 4 個 Material 對象輸入。將這些 Material 對象組裝成 List 集合類型,然后也可以讓 Struts2 自帶的類型轉換器進行類型轉換。
首先筆者在 Action 代碼中定義了 List 類型變量。并且運用 Java5 中的泛型來表明該 List 集合類型變量中的元素都是 Material 對象。當然,也可以在 Action 代碼中不使用泛型來標明是何種對象作為 List 集合類型的元素。另一種方法就是示例中寫明的在屬性文件中指定 List 集合類型的元素是何種對象。
注意:該屬性文件屬于局部類型轉換屬性定義文件。文件名要以 ActionName 打頭,然后以“ --conversion.properties ”結尾。這表示是對該 Action 中的 List 集合類型指定元素類型。而且該屬性文件一定要和 Action 放在同一目錄下。否則運行系統時候 Struts2 是不會知道該 Action 的 List 集合類型變量元素是何種類型對象。
( 2 )試設想有一種情況,多個 Action 都需要將某一變量的類型進行轉換。此時可以像之前所述使用屬性文件來定義被轉換類型的變量。但是 1 個 Action 定義 1 個屬性文件則太浪費時間。因此 Struts2 中還有個全局類型轉換屬性定義文件,這樣所有需要類型轉換的 Action 都可以調用該文件中定義的需要類型轉換的變量。全局屬性文件名字必須為“ xwork-conversiion.properties ”。文件中定義的內容其實和局部屬性文件中大同小異,只是這些被定義的變量可以在所有 Action 中進行類型轉換。全局屬性文件沒必要和具體 Action 代碼文件放在一起,只需要放在源代碼根目錄下即可。也就是說全局屬性文件直接放在“ src ”文件夾下即可。
( 3 )在頁面輸入的 JSP 中,千萬不能將 List 集合類型的變量名寫錯,否則 Action 是得不到具體在頁面上輸入的值。而且因為是 List 類型,所以可以利用 OGNL 來循環遍歷。這樣在頁面上可依次輸入數據。數據顯示的 JSP 頁面上沒有什么特別需要注意的,讀者可以看到只是利用 Struts2 的標簽來顯示這些數據。
( 4 )讀者可由圖 7.3 、圖 7.4 看出,批量的 Material 對象數據輸入其實和單個 Material 對象輸入本質上沒有多大區別。在視圖界面上只是利用 OGNL 、 Struts2 標簽來保證數據可以輸入和顯示。在 Action 這一層和普通的 Struts2 的 Action 導航沒有多大區別。最重要的是全局和局部類型轉換屬性文件的定義。讓系統明白集合類型中包含的元素是何種對象。不過也請讀者不要誤解,以為 Set 集合類型轉換也是如此。接下來筆者將講解 Set 集合類型數據類型轉換的注意點。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
