6

一直在用有动作的按钮来解决问题。我有几个 btns,我想知道它的参数。在 grails 教程中它说它应该是这样的:

 <g:actionSubmit    action="action" value="${message(code: 'default.button.edit.label', default: 'Edit')}" params="['actionTaken':editPhone]"/>

我尝试使用 remotelink、submitButton、submitToRemote 标签,但没有一个有效。当我尝试在控制器中解析它时,我总是得到 null:

def action=
    {
        def actionTaken = params.actionTaken
        def employeeId= params.employeeId

        MySession session = MySession.getMySession(request, params.employeeId)
        profileInstance = session.profileInstance

        switch(actionTaken)
        {
            case "editPhone" :
                isEditPhone=true
                break

            case "editEmail" :
                isEditEmail=true
                break
        }
        render(view:"profile", model:[profileInstance:session.profileInstance, isEditPhone:isEditPhone, isEditEmail:isEditEmail])
    }

我错过了什么?我的参数代码错了吗?我解析参数的代码错了吗?这只是让我陷入没有进展的圈子。帮助。谢谢。

4

5 回答 5

7

Grails 文档并未将其params列为actionSubmit.

通过利用该标签的实际作用,可以在控制器的参数列表中注入您想要的值:

def editPhone = { forward(action:'action', params:[actionTaken: 'editPhone'])}
def editEmail = { forward(action:'action', params:[actionTaken: 'editEmail'])}

如果这使您的代码更清晰,您可能还只想将完全独立的逻辑编码到editPhoneand操作中。editEmail

更新的查看代码:

<g:actionSubmit action="editPhone" value="${message(code: 'default.button.edit.label', default: 'Edit')}" />
于 2012-07-21T06:05:52.490 回答
4

params属性被解析为一个映射,其中被视为字符串,但被视为表达式。所以

params="['actionTaken':editPhone]"

正在尝试将名为的键定义为具有GSP 模型中actionTaken命名的变量的值。editPhone由于没有这样的变量,您将获得空值。所以解决方法是移动引号:

params="[actionTaken:'editPhone']"

这会将值设置为字符串“editPhone”。

于 2012-07-20T12:33:57.687 回答
3

您还可以使用在 POST 数据中传递参数

<input type="hidden" name="actionTaken" value="editPhone" />

表格内。然后它也可以通过 params 变量访问。这个对我有用。

于 2013-10-03T12:13:42.590 回答
0

我刚刚遇到了类似的问题(我需要连同一个 id 一起提交删除)并找到了使用 HTML5 的“formaction”属性进行提交输入的解决方案。它们可以被赋予一个值,该值可以包括控制器、动作、附加参数等。

通常,向提交按钮添加参数(例如编辑表单上的特定子对象)如下所示:

<input type="submit" formaction="/<controller>/<action>/<id>?additionalParam1=...&additionalParam2=..." value="Action" >

在你的例子中:

<input type="submit" formaction="action?actionTaken=editPhone" value="${message(code: 'default.button.edit.label', default: 'Edit')}" >
于 2013-08-14T17:04:32.990 回答
0

在我的情况下,我有一个表单元素,在表的每一行(即数据表编辑按钮)上有多个操作。发送整个表单数据很重要,所以我不能只使用链接。我发现注入参数的最快方法是使用 javascript。不理想,但它有效:

function injectHiddenField(name, value) {
    var control = $("input[type=hidden][name='" + name + "']");
    if (control.size() == 0) {
        console.log(name + " not found; adding...");
        control = $("<input type=\"hidden\" id=\"" + name + "\" name=\"" + name + "\">");
        $("form").append(control);
    }
    control.val(value);
}

您的按钮可能如下所示:

<g:each in="${objects}" var="object">
     ...
     <g:actionSubmit value="edit" action="anotherAction"
                     onclick="injectHiddenField('myfield', ${object.id})"/>
</g:each> 
于 2015-10-20T19:24:06.903 回答