Я пытаюсь заставить 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}+': '" th:for="${#ids.next('color')}"></label>
<input type=color th:field="*{color}"/>
<br>
<label th:text="'Passwort: '" 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;
}
}