如何在grails中使用操作按钮传递参数
一直在用有动作的按钮翻动。我有几个BTN,我想知道它的参数。在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
<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实际上,我在这里发布之前就已经这么做了,但仍然为空:(这是正确的答案。您必须记住,的上下文在表单中,表单将提交到标签中列出的操作。