2010-03-15 77 views
3

我创建了一个GSP页面,其中的控件取决于数据库中的行。
这取决于<g:each in="${Vehicles}" var="vehicle"> 返回的值因此,如果有3辆车,则会生成3行带文本框。 (最大可200)将数据从GSP传递到Grails中的控制器中

<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> 

我怎么能基本上这个值传递给我的控制器,这样我就可以保存/更新的数据到数据库中。还是有任何简单的方法来实现这种情况?

回答

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> 

控制器需要要么有与列表属性域或与列表属性命令对象即

SearchCommand { 
    List<Vehicle> vehicle = new Arraylist<Vehicle>(3); 
} 
在控制器

然后(如果使用命令对象)

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

希望有所帮助

+0

除了隐藏的表单字段,您还可以使用什么? – 2011-10-03 15:26:44

+0

除非您要在控制器中查找原始物品(车辆)购买ID,否则可能不需要HiddenField。 – 2011-10-05 02:51:42

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

相关问题