Итерируйте карту внутри списка для отображения значений в виде строки в JSP - PullRequest
0 голосов
/ 12 октября 2018

Мне нужно отобразить значение, которое находится внутри Map, а Карта внутри List.Прямо сейчас, Мои значения отображаются, но в виде столбцов (как показано на sceenshot).не в виде строки, я хочу отобразить все значения в виде столбца

enter image description here

Как видно на изображении выше, возьмите первую запись, 100 должнобыть сопоставленным со столбцом Pay Code. BASIC PAY должен быть сопоставлен с описанием 25300, должно быть сопоставлено с Amount и 2, бесполезно, я не хочу, чтобы это больше отображалось.

мой сервисный метод, который выбирает данные:

public List<Map<String, Object>> searchPayCodeByempCode(String tabSuffix, String empCode, String yyyyMm) {
    MapSqlParameterSource param = new MapSqlParameterSource();
    String tableName = "Salary_detail_report_082018";
    String query = "SELECT "
            + " DISTINCT PAY_CODE, "
            + " PAY_CODE_DESC, "
            + " AMOUNT, "
            + " row_number() over (Order by EMP_CODE ) AS ROW_NUM "
            + " FROM " + tableName
            + " WHERE EMP_CODE=" + empCode
            + " AND YYYYMM=" + yyyyMm
            + " AND PAY_CODE NOT IN (997,998,999) "
            + " ORDER BY PAY_CODE ASC ";
    List<Map<String, Object>> employees = queryForList(query);
    if (employees != null && !employees.isEmpty()) {
        for (Map<String, Object> employee : employees) {
             System.out.println("The set is: " + employee.keySet()); 
            for (Iterator<Map.Entry<String, Object>> it = employee.entrySet().iterator(); it.hasNext();) {
                Map.Entry<String, Object> entry = it.next();
                String key = entry.getKey();
                Object value = entry.getValue();
                System.out.println(key + " = " + value);
            }
        }
    }
    return employees;

Код JSP:

 <table class="table table-striped table-bordered dataTable no-footer tableWidth"  role="grid" name="employeeList" id="employeeList">
                                <thead>
                                    <tr>
                                        <th width="5%">S. No.</th>
                                        <th width="10%">Pay Code</th>
                                        <th width="15%">Description</th>
                                        <th width="10%">Amount</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    <c:forEach var="map" items="${mapList}">
                                        <c:forEach var="mapEntry" items="${map}">
                                            <tr>
                                                <%--<td>test : ${mapEntry.key}</td>--%>
                                                <td>test : ${mapEntry.value}</td>
                                            </tr>
                                        </c:forEach>
                                    </c:forEach>
                                </tbody>
                            </table>

Ожидаемый результат:

enter image description here

1 Ответ

0 голосов
/ 12 октября 2018

Вы должны повторять элементы списка как строки таблицы (<tr>), а для каждой строки повторять карту из элемента списка как ячейку таблицы (<td>):

<tbody>
    <c:forEach var="map" items="${mapList}">
        <tr>
            <c:forEach var="mapEntry" items="${map}">
                <td>${mapEntry.value}</td>
            </c:forEach>
        </tr>
    </c:forEach>
</tbody>

Разница в <tr> position.

Если у вас есть больше элементов на карте и вы хотите визуализировать только первые 4, вы можете использовать их для изменения состояния и значения индекса:

<c:forEach var="mapEntry" items="${map}" varStatus="status">
    <c:if test="${status.index <= 4 }">
        <td>${mapEntry.value}</td>
    </c:if>
</c:forEach>

Но еслиу вас карта в плохом порядке (например, при использовании HashMap), тогда лучше визуализировать ячейки:

<tbody>
    <c:forEach var="map" items="${mapList}">
        <tr>
            <td width="5%">${map.get("ROW_NUM")}</td>
            <td width="10%">${map.get("PAY_CODE")}</td>
            <td width="15%">${map.get("PAY_CODE_DESC")}</td>
            <td width="10%">${map.get("AMOUNT")}</td>
        </tr>
    </c:forEach>
</tbody>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...