簡體   English   中英

Struts2填充列表

[英]Struts2 Populate Lists

我在填充Struts2中的用戶定義對象屬性列表時遇到問題。

這是我的示例(省略了getters / setters):

公共類Foo {private String attr1; 私有String attr2; }

公共類Bar {private List foos; }

公共類StrutsAction擴展了ActionSupport {private Bar bar; }

我在JSP中的代碼如下(摘錄):

<tr><td><input type="text" name="bar.foos.attr1"/></td><td><input type="text" name="bar.foos.attr2"</td></tr>
<tr><td><input type="text" name="bar.foos.attr1"/></td><td><input type="text" name="bar.foos.attr2"</td></tr>

我需要每個表行在列表中為每個屬性創建1個foo項,但是我的代碼在通過每個屬性時都會為每個屬性創建一個新的foo對象,最終我得到4個foos而不是2個foos!

我知道我可以通過將Index硬編碼到html中來解決問題,如下所示:

<tr><td><input type="text" name="bar.foos[0].attr1"/></td><td><input type="text" name="bar.foos[0].attr2"</td></tr>
<tr><td><input type="text" name="bar.foos[1].attr1"/></td><td><input type="text" name="bar.foos[1].attr2"</td></tr>

我想知道是否可以不對索引進行硬編碼?

我認為您可以使用Struts 2迭代器標簽:

<s:iterator var="foo" value="bar.foos">
   <tr><td><s:property value="attr1"/> .....
</s:iterator>

如果它不起作用,我們可以考慮其他解決方案。

您可以在此處找到更多信息: http : //struts.apache.org/2.3.1/docs/iterator.html

[]秒

您說行數可變。 讓我們將其命名為numOfRows ...嘗試像這樣重寫示例:

<table>
<s:iterator status="stat" value="(numOfRows).{ #this }" >
    <tr>
        <td><input type="text" name="bar.foos[%{#stat.index}].attr1"/></td>
        <td><input type="text" name="bar.foos[%{#stat.index}].attr2"/></td>
    </tr>
</s:iterator>
</table>

您可以在此處找到有關Iterator標記的文檔。請看頁面底部。


如果在渲染階段沒有numOfRows ,那么恐怕生成文本字段的唯一方法是在客戶端使用JavaScript。...

[編輯]

關於索引...如果您有類似這樣的索引,則不必費心:

<table>
    <tr>
        <td><input type="text" name="bar.foos[0].attr1"/></td>
        <td><input type="text" name="bar.foos[0].attr2"/></td>
    </tr>
    <tr>
        <td><input type="text" name="bar.foos[3].attr1"/></td>
        <td><input type="text" name="bar.foos[3].attr2"/></td>
    </tr>
    <tr>
        <td><input type="text" name="bar.foos[5].attr1"/></td>
        <td><input type="text" name="bar.foos[5].attr2"/></td>
    </tr>
</table>

Struts會正確地進行轉換...您只需要知道,缺少索引的對象將為null ...因此您應該在操作中將其過濾掉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM