Флажок Grails

Я испытываю затруднения связать булево свойство в классах ассоциации. Свойство имеет значение true, если я проверяю (хороший) флажок, но является пустым, если checbox не проверяется.

Я знаю проблему с флажком HTML. Я знаю, почему, отправляют "_fieldName" в параметрических усилителях, но этот "_fieldName" не устанавливает мое булево свойство на ложь.

class Person{
   String title

   List<Group> groups = new ArrayList()
   static hasMany = [groups: Groups]    
}

class Group{
   String title
   Boolean isHidden

   static belongTo = Person
}

class PersonController{

   def form = {
      def person = new Person()
      person.groups.add( new Group() )    
      return ["person": person]
   }

   def handleForm = {
      def person = new Person( params )
      println person.groups[0]
   }
}


 <g:form action="save">
    <g:textField name="title" value="${person?.title}" />
    <g:textField name="groups[0].title" value="${person?.groups[0]?.title}"/> 
    <g:checkBox name="groups[0].isHidden" value="${person?.groups[0]?.isHidden}"  />   
    <g:submitButton name="save" value="Save" />
  </g:form>

Если я проверяю флажок:
[isHidden:on, title:a, _isHidden:]
println person.groups [0]//верный

Если я надеваю флажок проверки:
[title:a, _isHidden:]
println person.groups [0]//пустой указатель



Благодарите много справка
Tom
Я сожалею, я искал эту сеть, но не получил фактическую информацию для моей проблемы.

6
задан Tomáš 31 May 2010 в 05:45
поделиться

2 ответа

Я исправляю метку флажка. Благодаря помощи gid, теперь он работает и с ассоциацией.

из источника:
http://grails.org/doc/latest/ref/Tags/checkBox.html#

 if (value == null) value = false

out << "<input type=\"hidden\" name=\"_${name}\" /><input type=\"checkbox\" name=\"${name}\" "

if (value && checked) { out << 'checked="checked" ' } 

на:

if (value == null) value = false

def begin =  name.lastIndexOf('.') +1
def tail =  name.substring( begin);
out << "<input type=\"hidden\" name=\"${name.replace(  tail, "_" + tail  )}\" /><input type=\"checkbox\" name=\"${name}\" "

if (value && checked) { out << 'checked="checked" ' } 
5
ответ дан 9 December 2019 в 22:30
поделиться

После долгого взлома выяснилось, что grails ищет поле маркера с именем:

groups[0]._isHidden

, а не

_groups[0].isHidden

, что на самом деле генерирует тег g: checkBox . См. GrailsDataBinder.java:911 см. PropertyStartsWithFieldMarkerPrefix (PropertyValue pv, String fieldMarkerPrefix) для подтверждения

Если вам интересно, я загрузил тестовый проект для этого вопроса на gitub.com

5
ответ дан 9 December 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: