我的表单有一个项目列表,每个项目都有一个删除按钮。我需要提交要删除的项目的索引以及表单的其他值(以便进一步编辑)。

使用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时)。

10-07 18:50
查看更多