Как привязать список идентификаторов к объекту команды в Grails?
Допустим, когда вы отправляете форму, она отправляет список идентификаторов.
<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 ответа
Это было бы что-то вроде
<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>
Я мог заставить его работать только после изменения объекта команды на
class EmailCommand{
List<Registration> ids= ListUtils.lazyList([], { new Registration() } as Factory )
}
и посмотрите на следующее, как предложил басмартин.
<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?
У вас есть 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>
и пусть граальс сделает переплет.