Я пытаюсь использовать конвертер типов в приложении Spring Boot и использовать Thymeleaf, но я не могу заставить его работать. Я поместил некоторый код в Github, чтобы вы могли точно видеть, что я пытаюсь сделать. Это Spring 1.5.1 и Thymeleaf 3.0.3. https://github.com/matthewsommer/spring-thymeleaf-simple-converterПреобразователь типа Spring + Thymeleaf в форме
В основном этот код просто пытается добавить человека в объект комментария. Объект person имеет значение null, когда он отправляется, и я не понимаю, почему.
Что-то странное в том, что идентификатор человека не добавляется к атрибуту value, но он есть, если th: field = "* {body}" удален. Я думаю, что он должен делать с этим: https://github.com/thymeleaf/thymeleaf/issues/495, но я в настоящее время пытается добавить BindingResult и это не работает ...
Мой HTML является:
<body>
<div th:if="${personObject != null}" th:text="${personObject.name}"></div>
<form th:action="@{/}" th:object="${comment}" method="post">
<input type="hidden" th:if="${personObject != null}" th:value="${personObject.id}" th:field="*{person}" />
<textarea id="comment" placeholder="Comment..." th:field="*{body}"></textarea>
<button id="comment_submit" type="submit">Comment</button>
</form>
<div th:text="${comment.body}"></div>
</body>
Мой контроллер:
@Controller
public class HomeWebController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String getHome(final HttpServletRequest request, final Map<String, Object> model, @ModelAttribute(value = "comment") Comment comment) {
model.put("personObject", new Person(1, "John Smith"));
return "Home";
}
@RequestMapping(value = "/", method = RequestMethod.POST)
public String postHome(final HttpServletRequest request, final Map<String, Object> model, @ModelAttribute(value = "comment") Comment comment) {
model.put("commentBody", comment.getBody());
model.put("person", comment.getPerson());
return "Home";
}
}
а преобразователь:
@Component
public class StringToPersonConverter implements Converter<String, Person> {
@Autowired
public StringToPersonConverter() { }
@Override
public Person convert(String id) {
if(id == "1") {
Person person = new Person(1, "John Smith");
return person;
}
return null;
}
}
Вы пробовали код? – cralfaro