Приложение My Spring MVC основано на Spring Boot 1.2.8, Thymeleaf, Hibernate и Hateos. У меня есть объект «Market» с полем «enabled» типа Boolean.Binding checkbox in Thymeleaf + Spring MVC
@Entity
@Table(name = "market")
public class Market {
.....
private Boolean enabled;
....
public Boolean getEnabled() {
return enabled;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
}
код в контроллере для "/ создать"
@RequestMapping(value = "/create", method = RequestMethod.GET)
public ModelAndView create() {
return new ModelAndView("market/create")
.addObject("list", linkTo(methodOn(MarketController.class).list())
.withRel("List"))
.addObject("market", new Market())
.addObject("postLink",
linkTo(methodOn(MarketController.class).save(null, null, null, null))
.withRel("Save"));
}
Шаблон "рынка/создать", исх. http://www.thymeleaf.org/doc/tutorials/2.1/thymeleafspring.html#checkbox-fields
<form th:action="${postLink.href}" th:object="${market}" method="post">
....
<div class="form-group">
<label th:for="${#ids.next('enabled')}" th:text="#{market.enabled}">Enabled</label>
<input type="checkbox" th:field="*{enabled}" />
</div>
....
</form>
При открытии/рынки/создать в браузере, получают следующее исключение на линии с флажком
Cause: org.thymeleaf.exceptions.TemplateProcessingException Attribute "value" is required in "input(checkbox)" tags when binding to non-boolean values
Почему Thymeleaf рассматривает поле «включен», как не-логический тип? Я изо всех сил старался выяснить причину, но напрасно. Plz дает некоторые подсказки для его решения. Благодарю.
Спасибо Дэвиду, я попробовал с «значением» раньше, но его игнорировали при сохранении в БД. Насколько я понимаю, нет необходимости добавлять «ценность» в формы, подкрепленные весенними бобами, и ее делается тимелеафом. Плц исправьте меня, если я ошибаюсь. Пример. https://github.com/thymeleaf/thymeleafexamples-stsm/blob/2.1-master/src/main/webapp/WEB-INF/templates/seedstartermng.html, найдите флажок – fh76
Вы правы, извините, что я допустил ошибку, атрибут' enabled' должен быть инициализирован, если вы удалите атрибут 'value'. –
да, попробовал. Сделал «private Boolean enabled = Boolean.FALSE» в классе сущности, но тимелеар не рассматривает его как «логическое» и продолжает выдавать исключение. Я просматриваю образец https://github.com/thymeleaf/thymeleafexamples-stsm/blob/2.1-master/src/main/java/thymeleafexamples/stsm/business/entities/SeedStarter.java, он имеет поле " покрытый "типа Boolean. – fh76