Как привязать список идентификаторов к объекту команды в Grails? - PullRequest
0 голосов
/ 28 мая 2018

Скажем, когда вы отправляете форму, она отправляет список идентификаторов.

<form action="/process">
<input type="hidden" name="ids" value="4, 6, 10, 14, 20, 56" >
<input type="submit" value="Submit">
</form>

На стороне контроллера

def process(EmailCommand cmd){

   //now iterating over registrations after data binding
   cmd.ids.each {

    }
}


//Command Object
class EmailCommand {
  List<Registration> ids
}

Я хочу связать все идентификаторы, передаваемые контроллеру, ссписок идентификаторов в объекте команды EmailCommand.Как я могу этого достичь?Я ценю любую помощь!Спасибо!

Ответы [ 3 ]

0 голосов
/ 28 мая 2018

Это будет что-то вроде

<form action="/process">
    <input type="hidden" name="ids[0].id" value="4" >
    <input type="hidden" name="ids[1].id" value="6" >
    <input type="hidden" name="ids[2].id" value="10" >
    <input type="hidden" name="ids[3].id" value="14" >
    <input type="hidden" name="ids[4].id" value="20" >
    <input type="hidden" name="ids[5].id" value="56" >
    <input type="submit" value="Submit">
</form>

Или, если вы хотите что-то более динамичное:

<form action="/process">
    <g:each in="[4, 6, 10, 14, 20, 56]" var="id" status="i">
        <input type="hidden" name="ids[${i}]" value="${id}" >
    </g:each>
    <input type="submit" value="Submit">
</form>
0 голосов
/ 29 мая 2018

Я смог заставить его работать только после изменения объекта команды на

class EmailCommand{

    List<Registration> ids=  ListUtils.lazyList([], { new Registration() } as Factory )

}

и просмотра следующего, как предложил bassmartin.

<g:hiddenField name="ids[0].id" value="1"></g:hiddenField>
<g:hiddenField name="ids[1].id" value="2"></g:hiddenField>
<g:hiddenField name="ids[2].id" value="3"></g:hiddenField>
<g:hiddenField name="ids[3].id" value="4"></g:hiddenField>
<g:hiddenField name="ids[4].id" value="5"></g:hiddenField>


<g:submitButton name="submit" value="submit"></g:submitButton>

Мне интересно, почему пустой список в объекте команды не работает.Это ограничение версии Grails 2.2?

0 голосов
/ 28 мая 2018

У вас есть 2 варианта:

Прямо вперед -> трюк с разделенной запятой строкой в ​​«сеттере»:

class EmailCommand {
  List<Registration> ids
  void setIds( String val ){ ids = Registration.getAll( val.split( ', ' ) ) }
}

Исправьте -> используйте для этого параметры формы:

<form action="/process">

<g:each in="[4, 6, 10, 14, 20, 56]" var="id">
  <input type="hidden" name="ids" value="${id}" >
</g:each>
<input type="submit" value="Submit">
</form>

и позвольте Grails сделать связывание.

...