一直在使用有动作的按钮。我有几个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])
}
我错过了什么?我的params代码错了吗?解析params的代码是错误的吗?这只是让我圈起来没有进展。救命。感谢。
答案 0 :(得分:7)
Grails documentation未将params
列为actionSubmit
接受的属性之一。
可以通过利用实际所做的标记,在控制器的params列表中注入您想要的值:
def editPhone = { forward(action:'action', params:[actionTaken: 'editPhone'])}
def editEmail = { forward(action:'action', params:[actionTaken: 'editEmail'])}
您可能只想将完全独立的逻辑编码到editPhone
和editEmail
操作中,如果这样可以使您的代码更清晰。
更新了查看代码:
<g:actionSubmit action="editPhone" value="${message(code: 'default.button.edit.label', default: 'Edit')}" />
答案 1 :(得分:4)
params
属性被解析为地图,其中键被视为字符串,但值被视为表达式。因此
params="['actionTaken':editPhone]"
正在尝试定义名为actionTaken
的密钥,以获取GSP模型中名为editPhone
的变量的值。由于没有这样的变量,你会得到null。所以修复是移动引号:
params="[actionTaken:'editPhone']"
将值设置为字符串“editPhone”。
答案 2 :(得分:3)
您还可以使用
在POST数据中传递参数<input type="hidden" name="actionTaken" value="editPhone" />
在表单内。然后它也可以通过params变量访问。 它对我有用。
答案 3 :(得分:0)
我遇到了类似的问题(我需要与id一起提交删除)并找到一个使用HTML5的“格式”属性进行提交输入的解决方案。 它们可以被赋予一个值,包括控制器,动作,附加参数等。
通常,要在提交按钮中添加参数(例如编辑表单上的特定子对象),如下所示:
<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')}" >
答案 4 :(得分: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>