Java struts2迭代器:避免代码重复

Java struts2迭代器:避免代码重复,java,jsp,struts2,iterator,Java,Jsp,Struts2,Iterator,我正在创建一个表单,用户需要在其中动态添加表单元素。addEmptyItem()通过克隆给定列表中的第一项、清除其值、更新其索引并追加来完成此操作 当然,它要求列表中至少有一个列表项。我的解决方案是始终显示第一个列表项,然后遍历其余的列表项。这是困扰我,因为代码重复。当列表项包含很多字段时,情况会变得更糟 我想要的是类似于do while循环的东西。如何解决这个问题而不像我现在这样重复代码,有什么建议吗 <s:submit type="button" onclick="addEmptyIt

我正在创建一个表单,用户需要在其中动态添加表单元素。addEmptyItem()通过克隆给定列表中的第一项、清除其值、更新其索引并追加来完成此操作

当然,它要求列表中至少有一个列表项。我的解决方案是始终显示第一个列表项,然后遍历其余的列表项。这是困扰我,因为代码重复。当列表项包含很多字段时,情况会变得更糟

我想要的是类似于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>


您可以尝试将带有字段的代码移动到新的页面文件中,并将其包括在内,如下所示:

<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>
并在包含的文件中使用索引参数