问题
I am trying to populate an ArrayList over multiple table columns, this was originally done using Scriptlets on our old page but I know that the practice is frowned upon now. And I am having trouble translating it over using struts tags.
I want the table to end up like this,
Checkbox 1 Name 1 Checkbox 2 Name 2
Checkbox 3 Name 3 Checkbox 4 Name 4
etc....
This is the original scriptlet code:
<% for (int j=0; j < getDocumentList().length; j++) {
setPacket(j);
setStringIndex(Integer.toString(j));
%>
<tr>
<td><input type="checkbox" name="displayTag<%= getStringIndex() %>"/></td>
<td class="labelText"><%= getFormName() %></td>
<%
j++;
if (j < getDocumentList().length) {
setPacket(j);
setStringIndex(Integer.toString(j));
%>
<td><input type="checkbox" name="displayTag<%= getStringIndex() %>"/></td>
<td class="labelText"><%= getFormName() %></td>
<% } %>
</tr>
<% } %>
Edit: Here is the code working in it's final form!
<table width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td class="maintain_test_info_table_subholder width5per"><fmt:message key="column.select"/></td>
<td class="maintain_test_info_table_subholder width40per"><fmt:message key="column.docname"/></td>
<td class="maintain_test_info_table_subholder width5per"><fmt:message key="column.select"/></td>
<td class="maintain_test_info_table_subholder width40per"><fmt:message key="column.docname"/></td>
</tr>
<s:iterator value="documentsList" var="documentList" status="status">
<s:if test="#status.index == 0">
<s:set var="docIndex" value="%{#status.index}" />
</s:if>
<s:else>
<s:set var="docIndex" value="%{#docIndex+1}" />
</s:else>
<c:set var="rowClass" value="row_even"/>
<s:if test="#status.odd == true">
<c:set var="rowClass" value="row_odd"/>
</s:if>
<s:if test="%{#documentListSize > #docIndex}">
<tr class="${rowClass}">
<s:hidden name="%{'documentsList['+#docIndex+'].documentId'}" />
<s:hidden name="%{'documentsList['+#docIndex+'].documentName'}" />
<s:hidden name="%{'documentsList['+#docIndex+'].documentSelected'}" />
<td class="tablecell_middle width5per" >
<input type='checkbox' id='displayTag_${docIndex}' value="${documentsList[docIndex].documentSelected}"/>
</td>
<td class="tablecell_middle width40per" id='documentName_${docIndex}'>
<c:out value="${documentsList[docIndex].documentName}"/>
</td>
<s:set var="docIndex" value="%{#docIndex+1}" />
<s:if test="%{#documentListSize > #docIndex}">
<s:hidden name="%{'documentsList['+#docIndex+'].documentId'}" />
<s:hidden name="%{'documentsList['+#docIndex+'].documentName'}" />
<s:hidden name="%{'documentsList['+#docIndex+'].documentSelected'}" />
<td class="tablecell_middle width5per" >
<input type='checkbox' id='displayTag_${docIndex}' value="${documentsList[docIndex].documentSelected}"/>
</td>
<td class="tablecell_middle width40per" id='documentName_${docIndex}'>
<c:out value="${documentsList[docIndex].documentName}"/>
</td>
</s:if>
</tr>
</s:if>
</s:iterator>
</table>
回答1:
You need to set your ovn variable for the index like this
<s:set var="stringIndex" value="%{#status.index++}"/>
来源:https://stackoverflow.com/questions/41963479/using-siterator-to-populate-a-dynamic-arraylist-over-multiple-columns