Перебор списка коллекции в тимелист - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь создать простой список, который возвращает результаты из контроллера из коллекции List. Ранее я писал каждый отдельный результат из списка один за другим, но я знаю, что это плохая практика по принципу СУХОЙ. Вот почему я пытаюсь это изменить. Я не дружу с чабрецом.

Меня волнует, что:

  • пока список не пуст, я создал таблицы с результатами, как и раньше. Только на этот раз в виде петель.

  • тогда можно выбрать одну таблицу, которая затем будет сохранена в хранилище, как мне это сделать? Использование отправки под каждой таблицей?

Пожалуйста, помогите. Спасибо

  <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
    <head>
        <title>Bootstrap Example</title>
        <html xmlns:th="http://www.thymeleaf.org">

        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <link rel="stylesheet" type="text/css"
              href="css/font.css"/>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
        <script src="js/chart.js"></script>
        </head>
    <body>

    <div class="container">
        <h2>Cheapest Flight</h2>


        <div class="list-group">
            <a href="#" class="list-group-item ">

                <b><img th:src="@{'http://pics.avs.io/400/400/' + ${AirlineIataFirst} + '.png'}"></b>

        Bad code /////......

                <c><p th:text="'Airline:  ' + ${AirlineFirst}"/></c>
                <d><p th:text="'Price:  ' + ${PriceFirst}+ ${Currency}"/></d>
                <e><p th:text="'Departure:  ' + ${DepartureFirst} "/></e>
                <f><p th:text="'Return:  ' + ${ReturnFirst} "/></f>


            </a>

И что я пытаюсь сделать:

<a href="#" class="list-group-item" th:if="${flight != null}" >

<b><img th:src="@{'http://pics.avs.io/400/400/' + ${AirlineIataFourth} + '.png'}"></b>


<li th:each="flights : ${flight}" th:text="${flight}"></li>
<li th:each="prices : ${price}" th:text="${price}"></li>
 <c><p th:text="'Airline:  ' + ${flight}"/></c>
 <d><p th:text="'Price:  ' + ${price}+ ${Currency}"/></d>
 <e><p th:text="'Departure:  ' + ${DepartureFourth} "/></e>
 <f><p th:text="'Return:  ' + ${ReturnFourth} "/></f>

Контроллер:

        model.addAttribute("Currency", flightDTO.getCurrency());
        model.addAttribute("flight", cheapFlyService.flightList(output));
        model.addAttribute("number", cheapFlyService.flightNumberList(output));
        model.addAttribute("return", cheapFlyService.returnAtList(output));
        model.addAttribute("departure", cheapFlyService.departureAtList(output));
        model.addAttribute("price", cheapFlyService.priceList(output));

1 Ответ

2 голосов
/ 07 июля 2019

Кажется, что это не действительные теги HTML во втором случае. Ваш <a> никогда не закрывается. Кроме того, вам, вероятно, следует избегать использования таких вещей, как <b>, поскольку это очень запутанно (это устаревший способ выделять жирный текст). Удалите все эти типы тегов, так как это недопустимый HTML или просто сбивает с толку.

Кроме того, хотя это будет работать, наименование th:each будет обратным. Вы должны проходить несколько рейсов и указывать только один рейс:

Контроллер:

    model.addAttribute("currency", flightDTO.getCurrency());
    model.addAttribute("flights", cheapFlyService.flightList(output));
    model.addAttribute("numbers", cheapFlyService.flightNumberList(output));
    model.addAttribute("returns", cheapFlyService.returnAtList(output));
    model.addAttribute("departures", cheapFlyService.departureAtList(output));
    model.addAttribute("prices", cheapFlyService.priceList(output));

HTML:

<th:block th:each="flight : ${flights}">
    <span th:text=${flight.number}" th:remove="tag">[Flight Number]</span> <!-- or whatever property is that the Flight class may have.  Note the scoping. -->
</th:block>

Но основная обратная связь заключается в том, что полный HTML-код будет зависеть от того, как у вас смоделированы ваши данные. Например, если у рейса есть свойство, называемое routes, вы можете выполнить итерацию на routes с внутренним циклом в Thymeleaf. В противном случае вы добавляете отдельные списки в модель и просто вызываете метод toString для каждого:

<th:block th:each="departure : ${departures}">
    <span th:text=${departure}" th:remove="tag">[This is calling toString() on the objects in the list]</span>
</th:block>

Общий совет по отладке: начните с вещей, которые работают, и постепенно добавляйте. Если что-то сломано и вы потерялись, уберите все, пока оно не заработает, и постепенно добавляйте обратно, пока не найдете виновника (-ов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...