歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Struts2前端JSP中對List的取值和賦值

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

日期:2017/3/1 10:09:51   编辑:Linux編程

這裡以'景點+門票類型'的用例為示例,其對應關系為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