Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在grails中使用操作按钮传递参数_Grails_Button_Submit_Action_Params - Fatal编程技术网

如何在grails中使用操作按钮传递参数

如何在grails中使用操作按钮传递参数,grails,button,submit,action,params,Grails,Button,Submit,Action,Params,一直在用有动作的按钮翻动。我有几个BTN,我想知道它的参数。在grails教程中,它说应该是这样的: <g:actionSubmit action="action" value="${message(code: 'default.button.edit.label', default: 'Edit')}" params="['actionTaken':editPhone]"/> <input type="submit" formaction="/<control

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

 <g:actionSubmit    action="action" value="${message(code: 'default.button.edit.label', default: 'Edit')}" params="['actionTaken':editPhone]"/>
<input type="submit" formaction="/<controller>/<action>/<id>?additionalParam1=...&additionalParam2=..." value="Action" >

我错过了什么?我的密码错了吗?我解析参数的代码是否错误?这只会让我陷入困境,毫无进展。救命啊。谢谢。

params
属性解析为映射,其中键被视为字符串,而值被视为表达式。所以

params="['actionTaken':editPhone]"
正在尝试定义名为
actiontaked
的键,以便在GSP模型中具有名为
editPhone
的变量的值。因为没有这样的变量,所以会得到null。因此,解决方法是移动引号:

params="[actionTaken:'editPhone']"
这将设置字符串“editPhone”的值。

不将
params
列为
actionSubmit
接受的属性之一

通过利用该标记的实际功能,可以在控制器的参数列表中注入所需的值:

您也可能只想将逻辑完全编码到
editPhone
editEmail
操作中,如果这样可以使代码更干净的话

更新的视图代码:

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

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

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

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

您还可以使用

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

在表单内部。然后也可以通过params变量访问它。
在我的情况下,我有一个表单元素,在表的每一行上有多个操作(即数据表编辑按钮)。发送整个表单数据很重要,所以我不能只使用链接。我发现注入参数的最快方法是使用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);
}
函数injectHiddenField(名称、值){
变量控制=$(“输入[type=hidden][name=”+name+“]”);
if(control.size()==0){
日志(名称+“未找到;正在添加…”);
控件=$(“”);
$(“表格”)。追加(控制);
}
对照组:val(值);
}
您的按钮可以如下所示:

<g:each in="${objects}" var="object">
     ...
     <g:actionSubmit value="edit" action="anotherAction"
                     onclick="injectHiddenField('myfield', ${object.id})"/>
</g:each> 

...

您试过了吗。也许我忘记了params属性上的{},如果它不起作用,试着把它们像[{}]或{[]}一样放置。我现在不记得是怎么回事了。SRY实际上,我在这里发布之前就已经这么做了,但仍然为空:(这是正确的答案。您必须记住,的上下文在表单中,表单将提交到标签中列出的操作。