7.1.3 ? Set 集合類型數據類型轉換功能
技術要點 本節代碼具體介紹包含多個 Java 對象的 Set 集合類型如何進行類型轉換。
Set 集合類型類型轉換 Action 中使用方式。
Set 集合類型類型轉換在視圖界面的使用方式。
演示代碼
使用的 Action 文件:
- <!---------------文件名:AddMaterialAction.java------------> ??
- public ? class ?AddMaterialAction? extends ?ActionSupport?{ ??
- ????????? private ?Set<Material>?materialSet= new ?HashSet(); ??
- ??
- ????????? public ?String?execute()? throws ?Exception?{ ??
- ????????????????????? return ?SUCCESS; ??
- ?????????} ??
- ??
- ????????? public ?Set<Material>?getMaterialSet()?{ ??
- ??????????????????? return ?materialSet; ??
- ?????????} ??
- ? ??
- ????????? public ? void ?setMaterialSet(Set<Material>?materialSet)?{ ??
- ??????????????????? this .materialSet?=?materialSet; ??
- ?????????} ??
- }??
<!---------------文件名:AddMaterialAction.java------------> public class AddMaterialAction extends ActionSupport { private Set<Material> materialSet=new HashSet(); public String execute() throws Exception { return SUCCESS; } public Set<Material> getMaterialSet() { return materialSet; } public void setMaterialSet(Set<Material> materialSet) { this.materialSet = materialSet; } }
配置文件中的導航定義:
- <!---------------------文件名:struts.xml----------------> ??
- <!--?Action所在包定義?--> ??
- ?????????< package ?name= "C07.1.3" ? 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.3" 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>
指定 Set 類型中元素是具體何種對象屬性文件
- <!---------文件名:AddMaterialAction-conversion.properties------------> ??
- #集合屬性-Set類型 ??
- Element_materialSet=com.model.Material ??
- #制定索引 ??
- KeyProperty_materialSet=material??
<!---------文件名:AddMaterialAction-conversion.properties------------> #集合屬性-Set類型 Element_materialSet=com.model.Material #制定索引 KeyProperty_materialSet=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= "%{'materialSet.makeNew['+#m.index+'].material'}" ?/></td> ??
- ????????????<td><s:textfield?name= "%{'materialSet.makeNew['+#m.index+'].bid'}" ?/></td> ??
- ????????????<td><s:textfield?name= "%{'materialSet.makeNew['+#m.index+'].mount'}" ?/></td> ??
- ????????????<td><s:datetimepicker?name= "%{'materialSet.makeNew['+#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="%{'materialSet.makeNew['+#m.index+'].material'}" /></td> <td><s:textfield name="%{'materialSet.makeNew['+#m.index+'].bid'}" /></td> <td><s:textfield name="%{'materialSet.makeNew['+#m.index+'].mount'}" /></td> <td><s:datetimepicker name="%{'materialSet.makeNew['+#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= "materialSet" ?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="materialSet" 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.5 。
圖 7.5 ? 多個 material 對象數據輸入(組合成 Set 集合類型)
顯示數據如圖 7.6 。
圖 7.6 ? 多個 material 對象數據顯示
代碼解釋
( 1 )本小節還是以輸入多個 Material 對象為例。先說明一下在 Action 文件中,像 List 集合類型示例一樣筆者定義了一個 Set 集合類型變量 materialSet 。不過該變量必須顯示定義它的類型。如代碼中所示“ new HashSet() ”一樣。這是必須的,否則 Struts2 不知道該變量是哪一種 Set 集合,這樣系統會找不到在屬性文件中定義的索引和元素對象類型。
( 2 )屬性文件中除了繼續定義元素對象類型之外,還需要定義該集合類型變量的索引即代碼中所示的“ KeyProperty_materialSet=material ”。其實定義索引的通用格式為“ KeyProperty_SetName= 屬性”。也許有的讀者很難理解,其實也不很難。首先在 Action 中定義的 Set 集合類型變量名要寫在“ KeyProperty_ ”之后。然后“ = ”后面寫的是元素對象中開發者想指定為索引的屬性。比如示例中元素對象是 Material 對象。該對象有幾個屬性,其中有個屬性為“ material ”是代表 Material 對象的材料名字,就把它定義為索引。這里筆者的定義想表明的意思就是 materialSet 這個 Set 集合類型變量的索引是組成它的元素 Material 對象中的 material 屬性。如果屬性文件中寫成“ KeyProperty_materialSet=bid ”則表明把 Material 對象中表示材料價格的 bid 屬性作為 materialSet 的索引。
( 3 )在數據輸入的 JSP 頁面中,筆者使用了 OGNL 中的“ makeNew ” API 。由它來建立 materialSet 中的 material 對象。然后依次輸入 material 對象各個屬性數據。
( 4 )除了上述幾點之外, Set 集合類型轉換和 List 集合類型轉換就沒什么大區別。因此注意到這幾點也就完成了集合類型對象類型轉換的介紹。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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