迭代ArrayList&lt; Map <string,string =“”>&gt;来自使用JSTL的Java Bean?

时间:2016-05-02 21:01:03

标签: java dictionary arraylist jstl

让这个排序有点困难。在我的JSP页面中,我有一个显示x行数为3列的表。在我的Java bean中,我声明为:

private ArrayList<Map<String, String>> issueClient = new ArrayList<>();
private ArrayList<Map<String, String>> issueR2 = new ArrayList<>();

我通过MVC获取我的值并使用以下方法将它们放入Map:

 if (crs != null && crs.size() > 0) {
        try {
            while (crs.next()) {
                HashMap<String, String> tmpPart = new HashMap<>();

                tmpPart.put("part", crs.getString("part"));
                tmpPart.put("type", crs.getString("part_type"));
                tmpPart.put("id_issue", crs.getString("id_part"));
                tmpPart.put("issue", crs.getString("part_name"));

                repairPartAddNew.addIssueClientMap(tmpPart);
            }
        } catch (Exception e) {
         ....
        }
    } else {
      ....
    }

repairPartAddNew是对包含上面提到的ArrayList Map的Java Bean的引用。在我的JSP中,我已经开始构建以下内容:

<c:if test="${repairPartAddNew.issueClient != null}">
<c:set var="loopValue" value="1" scope="page" />
   <c:forEach var="issueClient" items="${repairPartAddNew.issueClient}" varStatus="loop">
      <c:forEach var="map" items="${issueClient}">
        <tr>
          <td>
            <form:select disabled="disabled" multiple="false" id="clientReportIssuePart${loopValue}" class="form-control input-sm" name="clientReportIssuePart" path="clientReportIssuePart" onchange="getPartSubtypes(this.value,$(this).parent().next().find('select').attr('id'));">
            <form:option value="${map.value}">${map.value}</form:option>
            <form:options items="${descriptionParts}" itemValue="value" itemLabel="name"/>
             </form:select>
           </td>
           <td>
              <form:select disabled="disabled" multiple="false" class="form-control input-sm" id="clientPartType${loopValue}" name="clientPartType" path="clientPartType" onchange="getRepairPartIssue(this.value,$(this).parent().next().find('select').attr('id'),$(this).parent().prev().find('select').val());">
              <form:option value="${map.value}">${map.value}</form:option>
              </form:select>
           </td>
           <td>
             <form:select disabled="disabled" multiple="false" class="form-control input-sm" id="clientRepair${loopValue}" name="clientReportIssuePartId" path="clientReportIssuePartId">
             </form:select>
           </td>
         </tr>
   </c:forEach>
 <c:set var="loopValue" value="${loopValue + 1}" scope="page"/>
</c:forEach>
</c:if>

我最终得到了数据结构中的各种可憎行为,包括http://prnt.sc/azjlgp

似乎迭代Array和Map正在生成重复的行。在此示例中,应该只有2个表行。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我建议使用对象来存储所有值而不是HashMap。然后,您可以将每个行数据存储在该对象中,并将它们全部存储在ArrayList中。然后,您应该能够根据需要从对象中提取每个值。

@Component({
    selector: 'sampleSelector',
    template: `<router-outlet></router-outlet>`,
    directives: [ROUTER_DIRECTIVES],
    providers: [ROUTER_PROVIDERS, HTTP_PROVIDERS]
})
@RouteConfig([
    {
        path: '/...', name: 'Dashboard', component: DashboardCenterComponent, useAsDefault: true
    }
])
export class AppComponent {
}

希望有所帮助。