我正在创建一个用户需要动态添加表单元素的表单。 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>
答案 0 :(得分: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>
并在附带的文件中使用索引参数。