我根据数据库中的行创建一个带控件的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>
我如何基本上将此值传递给我的控制器,以便我可以将数据保存/更新到数据库。或者有没有简单的方法来实现这种情况?
答案 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