我根据数据库中的行创建一个带控件的GSP页面.
这取决于<g:each in="${Vehicles}" var="vehicle">
So 返回的值,如果有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>
Run Code Online (Sandbox Code Playgroud)
我怎么能基本上将这个值传递给我的控制器,以便我可以将数据保存/更新到数据库.或者有没有简单的方法来实现这种情况?
你需要在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>
Run Code Online (Sandbox Code Playgroud)
Controller需要具有List属性的Domain或具有List属性的Command对象ie
SearchCommand {
List<Vehicle> vehicle = new Arraylist<Vehicle>(3);
}
Run Code Online (Sandbox Code Playgroud)
然后在控制器中(如果使用命令对象)
def save = {SearchCommand searchCmd->
searchCmd.vehicle.each {vehicle ->
/* Process Vehicle */
}
}
Run Code Online (Sandbox Code Playgroud)
希望有助于