2011-03-15 173 views
0

我正在創建一個表單,用戶需要動態添加表單元素。 addEmptyItem()通過克隆給定列表中的第一個項目,清除其值,更新其索引並附加它來完成此操作。struts2迭代器:避免代碼複製

當然,它要求列表中至少有一個列表項。我的解決方案是始終顯示第一個列表項,然後遍歷其餘的部分。由於代碼重複,這讓我感到困擾。當列表項包含很多字段時,情況會變得更糟。

我想要的是類似於do-while循環的東西。任何建議如何,而無需複製代碼解決這個問題,就像我現在做的:

<s:submit type="button" onclick="addEmptyItem($('#owners')); return false;" 
      value="%{getText('ownership.addOwner')}"/> 

<ul id="owners"> 
    <li> 
    <s:textfield name="ownership.owner[0].name" 
       label="%{getText('ownership.owner.name')}"/> 
    <s:textfield name="ownership.owner[0].share" 
       label="%{getText('ownership.owner.share')}"/> 
    </li> 

    <s:iterator value="ownership.owner" status="i" begin="1"> 
    <li> 
     <s:textfield name="ownership.owner[%{#i.count}].name" 
        label="%{getText('ownership.owner.name')}"/> 
     <s:textfield name="ownership.owner[%{#i.count}].share" 
        label="%{getText('ownership.owner.share')}"/> 
    </li> 
    </s:iterator> 
</ul> 

回答

1

你可以嘗試使用領域新的頁面文件移動代碼,並附這樣的:

<ul id="owners"> 
    <li> 
    <s:include value="fileds.jsp"> 
     <s:param name="index" value="0" /> 
    </s:include> 
    </li> 

    <s:iterator value="ownership.owner" status="i" begin="1"> 
    <li> 
     <s:include value="fileds.jsp"> 
     <s:param name="index" value="%{#i.count}" /> 
     </s:include> 
    </li> 
    </s:iterator> 
</ul> 

並在包含文件中使用索引參數。