如何通过PARAMS Grails中使用操作按钮(how to pass params using

2019-07-30 12:12发布

一直有toruble与具有操作的按钮。 我有几个btns,我想知道它的paramaeter。 Grails的教程它说,它应该是这样的:

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

我试着用remotelink,提交按钮,submitToRemote标签,但没有工作。 我总是得到空当我尝试在我的控制器解析它:

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])
    }

我在想什么? 是我的参数Code错了吗? 是我在解析代码PARAMS错了吗? 这只是让我在圈子里,没有进步。 救命。 谢谢。

Answer 1:

在Grails的文件没有列出params由接受属性之一actionSubmit

可能通过利用什么标签实际上不会注入在控制器的PARAMS列表中选择所需的值:

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

你也可能只是想刚才的代码完全独立的逻辑到editPhoneeditEmail行为如果使你的代码更加清晰。

更新查看代码:

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


Answer 2:

所述params属性被解析为一个图,其中的被处理的字符串,但被视为表达式。 因此

params="['actionTaken':editPhone]"

试图定义一个名为关键actionTaken有从命名变量的值editPhone在GSP模型。 由于没有这样的变量你得到空。 因此,解决方法是把引号:

params="[actionTaken:'editPhone']"

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



Answer 3:

你也可以使用通过POST数据里面的参数

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

在表单内。 然后,它也是通过PARAMS变量访问。 这个对我有用。



Answer 4:

我只是有一个类似的问题(我需要提交与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')}" >


Answer 5:

在我的情况,我有一个表(即数据表编辑按钮)的每一行多个动作单个表单元素。 发送整个表单数据,所以我不能只使用环节是很重要的。 我发现注入参数的最快方法是使用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> 


文章来源: how to pass params using action button in grails