将数据从GSP传递到Grails中的控制器

时间:2010-03-15 16:23:11

标签: grails

我根据数据库中的行创建一个带控件的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 个答案:

答案 0 :(得分:6)

您需要在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>

Controller需要具有List属性的域或具有List属性的命令对象,即

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

然后在控制器中(如果使用命令对象)

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

希望能帮助

答案 1 :(得分:2)

您需要使用控制器中的请求对象。如果您可以生成需要访问的控件的名称,请执行以下操作

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