Thymeleaf th: каждый ремонт - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь использовать функцию th: каждой для своего сайта, чтобы найти всех собак в моей базе данных, и использую следующий код.В моем контроллере у меня есть:

@Controller
public class DogController {

private DogDatabase database = new DogDatabase();
@RequestMapping(value = "/allDogs", method = RequestMethod.GET)
public String getAllDogs(Model model)
{
    ArrayList<Integer> ids = database.getAllIDs();
    System.out.println(ids.size());
    Dog[] dogs = new Dog[ids.size()+1];

    for(int i = 0; i < ids.size(); ++i)
    {
        dogs[i] = database.getDog(ids.get(i));
    }
    model.addAttribute("dogs", dogs);

    return "getAllDogs";
}

После этого цикла for я сделал println для каждого объекта в массиве и проверил, что все мои объекты собаки являются действительными и не равны NULL.После проверки правильности массива я передаю его в качестве модели и пытаюсь получить его в HTML.Текущая проблема заключается в том, что, когда я иду в HTML, он ничего не отображает.Я не получаю никаких ошибок тимелист, только пустой экран.В приложении мой HTML-код, где я называю th: каждый

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>All Dogs</title>
</head>

<body>
    <table>
        <th:block th:each="dog : ${dogs}">
            <tr>
                <td>Name: </td>
                <td th:text="${dog.name}">Name</td>
            </tr>
        </th:block>
    </table>
</body>
</html>

Редактировать один и два: редактировать было исправить ошибки, которых не было в моем коде

Редактировать три: я пытался переключить собакуи собак в итераторе (как в коде выше), но теперь я получаю сообщение об ошибке «Исключительная ситуация при вычислении выражения SpringEL:« dog.name »(template:« getAllDogs »- строка 13, столбец 21)»

Однако это не имеет смысла, так как я использую dog.name по всему сайту, а getName () является общедоступной в классе Dog.По запросу я добавляю класс моей собаки: https://pastebin.com/Lknc8dtZ

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Здесь нет причин использовать array из Dog[] вместо List<Dog> - и это, вероятно, является причиной вашей ошибки.Вы создаете array, который слишком велик, и поэтому он пытается вызвать getName() на ноль object.

@RequestMapping(value = "/allDogs", method = RequestMethod.GET)
public String getAllDogs(Map<String, Object> model) {
    List<Dog> dogs = database.getAllIDs()
            .stream()
            .map(id -> database.getDog(id))
            .collect(Collectors.toList());
    model.put("dogs", dogs);
    return "getAllDogs";
}

Кроме того, вам не нужно дополнительное <th:block />,Вы можете переместить th:each непосредственно на <tr>.

<table>
    <tr th:each="dog : ${dogs}">
        <td>Name: </td>
        <td th:text="${dog.name}">Name</td>
    </tr>
</table>
0 голосов
/ 27 ноября 2018

Я полагаю, что проблема здесь:

<th:block th:each="dogs : ${dog}">

На вашем контроллере вы связываете массив Dog [] с переменной "dogs":

model.addAttribute("dogs", dogs);

Так что в вашемшаблон, который вы должны повторять следующим образом:

<th:block th:each="dog : ${dogs}">
            <tr>
                <td>Name: </td>
                <td th:text="${dog.name}">Name</td>
            </tr>
</th:block>

чтобы найти каждую собаку в массиве собак:)

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