Получение "Ни BindingResult, ни простого целевого объекта для имени компонента" имя компонента ", доступного как атрибут запроса" при цикле - PullRequest
0 голосов
/ 12 января 2020

Я пытаюсь заставить Multipile Forms помещать информацию. Эти формы идентичны, за исключением информации о типе. Это представлено в Java в интерфейсе типа enun. Все поля формы должны go в объекте Color предпочтительно.

Если я сделаю это без l oop, и изменит то, что дано тимелисту, это сработает.

Я запускаю это с Java 1.8.0_231, spring-core 5.1.6, springboot 2.1.4, thymeleaf 3.0.11 Примечание: это не полный список!

Ниже приведен мой текущий код реле:

Моя проблема заключается в том, что тимелиф выдает следующую ошибку:

org.thymeleaf.exceptions.TemplateInputException: при синтаксическом анализе шаблона произошла ошибка (template: "class path resource [templates / index.html] ")
Вызвано: org.attoparser.ParseException: Ошибка при выполнении процессора
'org.thymeleaf.spring5.processor.SpringInputGeneralFieldTagProcessor' (шаблон:" index "- строка 9, столбец 31)
Вызывается: org.thymeleaf.exceptions.TemplateProcessingException: ошибка при выполнении процессора 'org.thymeleaf.spring5.processor.SpringInputGeneralFieldTagProcessor' (шаблон: "index" - строка 9, строка 31)
Причина: java .lang.IllegalStateException: ни BindingResult, ни простой целевой объект для имени компонента 'colorObj' не доступны в качестве атрибута запроса

этот индекс. html начинается со строки 7

       <th:block th:each="colorObj : ${ColorDevs}">
        <form method="POST" action="#" th:action="@{/}" th:object="${colorObj}">
            <label th:text="${colorObj.type.displayName}+':&nbsp'" th:for="${#ids.next('color')}"></label>
            <input type=color th:field="*{color}"/>
            <br>
            <label th:text="'Passwort:&nbsp'" th:for="${#ids.next('pass')}"></label>
            <input type=password th:field="*{pass}"/>
            <br>
            <input type="hidden" th:field="*{type}"/>
            <input type="submit"/>
        </form>
        <br>
    </th:block>

Мои контроллеры:

        @GetMapping("/")
    public String index(Model model){
        List<Color> colors = new java.util.ArrayList<>(Collections.emptyList());
        for (int i =0;i<Type.values().length;i++) {
            colors.add(new Color(Type.values()[i]));
        }

        model.addAttribute("ColorDevs",colors);
        return "index";
    }

    @PostMapping("/")
    public RedirectView color(@ModelAttribute("color") Color color, BindingResult bindingResult){
        System.err.println(color.toString());
        return new RedirectView("/");
    }

Класс цвета

        @Data @Getter
    public class Color {
        private String color = "";
        private String pass = "";
        private Type type;

        public Color(Type type){
            this.type=type;
        }
    }

И, наконец, мой класс Type

    public enum Type {
        COLOR("Color"),
        PANE("Pane");

        Type(String name){
            displayName=name;
        }

        private final String displayName;

        public String getDisplayName() {
            return displayName;
        }
    }

1 Ответ

0 голосов
/ 12 января 2020

Мне удалось решить проблему, добавив следующий метод в Мой контроллер:

    @ModelAttribute
    Color setupForm () {
        return new Color();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...