我的表单有一个项目列表,每个项目都有一个删除按钮。我需要提交要删除的项目的索引以及表单的其他值(以便进一步编辑)。
使用JavaScript,如下所示:
<g:form method="post" mapping="defaultAction" id="${paymentInstance?.id}">
<g:hiddenField name="id" value="${paymentInstance?.id}"/>
<g:hiddenField name="version" value="${paymentInstance?.version}"/>
<g:hiddenField name="deleteAdjIdx"/>
<g:each in="${paymentInstance?.adjustments}" var="adj" status="idx">
<g:set var="adjName" value="adjustments[${idx}]"/>
<g:textField name="${adjName}.dollars" value="${adj.dollars}"/>
<g:actionSubmit action="deleteAdj" value="delete" onclick="jQuery('#deleteAdjIdx').val(${idx})"/>
</g:each>
</g:form>
没有JavaScript怎么办? (除了发布的参数外,我还可以在URL中添加参数吗?或者在映射中进行某种复用?)
defaultAction映射为:
name defaultAction: "/$controller/$id"{ // stable URL for payments regardless of current status (editable or not)
constraints {
id(matches: /\d+/) // since our action names don't start with a digit but many domain ids do
}
}
最佳答案
我只是遇到了同样的问题,并找到了另一个使用HTML5的“formaction”属性的解决方案。
可以为它们提供一个值,其中可以包括 Controller ,操作,其他参数等。
通常,向表单上的“提交”按钮(例如删除特定子对象)添加参数看起来像这样:
<input type="submit" formaction="/<controller>/<action>/<id>?additionalParam1=...&additionalParam2=..." value="Delete" >
在您的示例中:
<input type="submit" formaction="/payment/deleteAdj/${adj.id}" value="delete" >
要么
<input type="submit" formaction="/payment/deleteAdj?delAdjID=${adj.id}" value="delete" >
在deleteAdj中,您将删除params.id或params.delAdjID中所述的调整并保存
参数中的数据,或直接使用参数重新填写表单(例如,渲染create.gsp时)。