2016-02-16 5 views
0

Приложение 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 дает некоторые подсказки для его решения. Благодарю.

ответ

0

В любом случае атрибут value является обязательным.

Попробуйте примерно следующее: <input type="checkbox" th:field="*{enabled}" value="true" />. Поле enabled должно быть установлено true, когда вы проверили ввод; null в противном случае.

+0

Спасибо Дэвиду, я попробовал с «значением» раньше, но его игнорировали при сохранении в БД. Насколько я понимаю, нет необходимости добавлять «ценность» в формы, подкрепленные весенними бобами, и ее делается тимелеафом. Плц исправьте меня, если я ошибаюсь. Пример. https://github.com/thymeleaf/thymeleafexamples-stsm/blob/2.1-master/src/main/webapp/WEB-INF/templates/seedstartermng.html, найдите флажок fh76

+0

Вы правы, извините, что я допустил ошибку, атрибут' enabled' должен быть инициализирован, если вы удалите атрибут 'value'. –

+0

да, попробовал. Сделал «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

0

Попробуйте присвоить атрибуту что-то другое, чем «включено», возможно, «marketEnabled».