歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Struts2前端JSP中對List的取值和賦值

這裡以'景點+門票類型'的用例為示例,其對應關系為1-N,在數據庫中門票類型表包含了對應門票的外鍵。使用Hibernate的的級聯操作從數據庫中取出的景點對象scenery,scenery對象包含門票類型列表(List類型)tbSceneryTickets。景點的hbm文件的有如下的one-to-many設置:

  1. <!-- 這裡需要Parent一端設置inverse="true" cascade="all"-->     
  2. <list name="tbSceneryTickets" lazy="false" inverse="true" cascade="all">     
  3.     <key><column name="SCENERY_ID" /></key>     
  4.     <index column="ID" type="java.lang.String" />     
  5.     <one-to-many class="TbSceneryTickets" />     
  6. </list>  

需要注意的是這裡通過index屬性設置了List的索引為門票類型的ID(所以這裡需要設置其主鍵ID為數字)。

在JSP中取得tbSceneryTickets中每個對象的值時候,使用struts2的iterator標簽,通過OGNL表達可以設置其value屬性的值為“scenery.tbSceneryTickets”,通過設置其id屬性來標識每個對象,代碼如下:

  1. <s:iterator value="scenery.tbSceneryTickets" id="h">   
  2. <s:if test="#h != null">   
  3. <tr id="oldTicket<s:property value='#h.id'/>">   
  4.     <td>   
  5.     門票類型:<input type="text" name="scenery.tbSceneryTickets[<s:property value='#h.id'/>].typeName"    
  6.     class="input" value='<s:property value="typeName"/>' />   
  7.     </td>   
  8.     <td>   
  9.     門票價格:<input type="text" name="scenery.tbSceneryTickets[<s:property value='#h.id'/>].price"    
  10.     class="input" value='<s:property value="price"/>' />   
  11.     </td>   
  12. </tr>   
  13. </s:if>   
  14. </s:iterator>  

在取得tbSceneryTickets中每個門票類型對象的值的時候,可以將其索引和屬性作為頁面標簽的name屬性值,如門票類型值:

<input type="text" name="scenery.tbSceneryTickets[<s:property value='#h.id'/>].typeName"   

這裡注意的是索引的取法,這裡的#h.id對應的是List中該門票類型對象的索引值,同時也是該門票類型對象在數據庫中的主鍵值。所以修改提交時,Struts2通過ONGL表達式將每個門票類型對象的屬性更新到服務器端的tbSceneryTickets列表中,由於存在hibernate的映射和級聯設置,也可以順利的更新到數據庫中。

如果這時有新的門票類型在修改景點對象的時候插入,可用的策略是在浏覽器端用JavaScript來控制輸入框的添加,並且維持一個唯一的索引,代碼如下(代碼中的索引i為大於0的動態數值):

門票類型:<input type="text" name="newSceneryTickets[i].typeName" />  

在服務器端維持一個名為newSceneryTickets的門票類型的List,前段提交後,Struts2通過ONGL表達式將每個新增的門票類型對象存入到服務器端的newSceneryTickets列表中,然後在將newSceneryTickets的中的每個門票類型對象存入tbSceneryTickets列表中,到由於存在hibernate的映射和級聯設置,也可以順利的插入到數據庫中,並且自動建立新增門票類型對象和景點對象的對對應關系。

Copyright © Linux教程網 All Rights Reserved