Передача данных из GSP на контроллер в Grails - PullRequest
3 голосов
/ 15 марта 2010

Я создаю страницу GSP с элементами управления, зависящими от строк в базе данных.
Это зависит от значения, возвращаемого <g:each in="${Vehicles}" var="vehicle"> Таким образом, если есть 3 транспортных средства, будут сгенерированы 3 строки с текстовыми полями. (Максимум может быть 200)

<g:form action="update" >
      <label for="SearchTerm">${term}</label>

          <g:each in="${Vehicles}" var="vehicle">
            <tr>
                     <td> <label for="Name">${vehicle.name}</label> </td>
                     <td><g:textField name="${vehicle.id}.ModelNo" /> </td>
                     <td><g:textField name="${vehicle.id}.Year" /> </td>
            </tr>
          </g:each>
  <td> <g:submitButton name="update" value="Update"/></td>
  </g:form>

Как я могу в основном передать это значение своему контроллеру, чтобы затем сохранить / обновить данные в базе данных. или есть какой-нибудь простой способ добиться этого сценария?

Ответы [ 2 ]

6 голосов
/ 16 марта 2010

Вам нужен такой код в GSP

    <g:form action="update" >
          <label for="SearchTerm">${term}</label>

              <g:each in="${Vehicles}" var="vehicle" status="i">
                <tr>
                         <td> <label for="Name">${vehicle.name}</label> </td>
                         <td><g:hiddenField name="vehicle[${i}].id" value="${vehicle.id}"/>
<g:textField name="vehicle[${i}].ModelNo" value="${vehicle.ModelNo}"/> </td>
                         <td><g:textField name="vehicle[${i}].Year" value="${vehicle.Year}"/> </td>
                </tr>
              </g:each>
      <td> <g:submitButton name="update" value="Update"/></td>
    </g:form>

Контроллер должен иметь домен со свойством списка или объект команды со свойством списка, например

SearchCommand {   
  List<Vehicle> vehicle = new Arraylist<Vehicle>(3); 
}

Затем в контроллере (если используется объект команды)

def save = {SearchCommand searchCmd-> 
  searchCmd.vehicle.each {vehicle ->
     /* Process Vehicle */
  }
}

Надеюсь, что поможет

2 голосов
/ 15 марта 2010

Вам необходимо использовать объект запроса от вашего контроллера. Если вы можете сгенерировать имена элементов управления, к которым вам нужен доступ, сделайте что-то вроде следующего:

idList.each {
theYear=request.getParameter(it+Year)
}

Если вы хотите получить список всех сгенерированных полей формы, используйте что-то вроде

java.util.Enumeration theFields=request.getParameterNames()
theFields.each {
//look at your field name and take appropriate action
}

Подробнее об объекте запроса см. this

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...