一直有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错了吗? 这只是让我在圈子里,没有进步。 救命。 谢谢。
在Grails的文件没有列出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')}" />
所述params
属性被解析为一个图,其中的键被处理的字符串,但值被视为表达式。 因此
params="['actionTaken':editPhone]"
试图定义一个名为关键actionTaken
有从命名变量的值editPhone
在GSP模型。 由于没有这样的变量你得到空。 因此,解决方法是把引号:
params="[actionTaken:'editPhone']"
这将值设置为字符串“editPhone”。
你也可以使用通过POST数据里面的参数
<input type="hidden" name="actionTaken" value="editPhone" />
在表单内。 然后,它也是通过PARAMS变量访问。 这个对我有用。
我只是有一个类似的问题(我需要提交与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')}" >
在我的情况,我有一个表(即数据表编辑按钮)的每一行多个动作单个表单元素。 发送整个表单数据,所以我不能只使用环节是很重要的。 我发现注入参数的最快方法是使用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>