Grails/AJAX:使用g:submitToRemote更新页面中的任意区域

Grails/AJAX:使用g:submitToRemote更新页面中的任意区域,ajax,grails,gsp,Ajax,Grails,Gsp,在GSP(Groovy服务器页面)中,我使用在服务器端调用后更新 根据标签和web上的其他来源,目标可以任意放置在页面上。然而,在我的测试中,我发现需要围绕标记 如果没有,则将使用一些“随机”内容(即表单中围绕标记的部分)更新 考虑以下普惠制代码: <html> <head> <g:javascript library="prototype" /> </head> <body> <div id="updateMe_NOT

在GSP(Groovy服务器页面)中,我使用
在服务器端调用后更新

根据标签和web上的其他来源,目标
可以任意放置在页面上。然而,在我的测试中,我发现
需要围绕
标记

如果没有,则
将使用一些“随机”内容(即表单中围绕
标记的部分)更新

考虑以下普惠制代码:

<html>
<head>
    <g:javascript library="prototype" />
</head>
<body>

<div id="updateMe_NOT_WORKING">${message}</div>

<g:form>
    <div id="updateMe_WORKING">
        <g:submitToRemote value="Click Me"
            action="someAction" update="updateMe_NOT_WORKING" />
    </div>
</g:form>

</body>
</html>

${message}
这在Grails1.3.4上。

我错过了什么谢谢

我认为问题在于您没有为您的操作指定控制器。尝试将controller=“…”添加到g:submitToRemote标记中。或者至少在g:form中指定它


我确信
不需要包装。

根据我的测试,
g:submittomote
动作
属性不能指向当前控制器的当前动作(因为这将把当前视图插入/复制到当前视图中)

如果您在
g:submitToRemote
中指定了一个替代操作,则该操作有效-即

<g:submitToRemote value="Click Me"
    action="ajaxAction" update="updateMe" />
然后需要有一个相应的普惠制——在这种情况下,应该说明

$message
或者,该操作可以使用
render
方法-如下所示

def ajaxAction = { render 'foo' }

我会把这个问题留待一段时间,以防有其他的回应,如果没有,我会接受这个答案作为解决方案


谢谢

谢谢你的回答[+]这使我更深入地研究了这个问题
controller
属性实际上没有什么区别,但它是
action
属性(它必须引用一个不是当前操作的操作,加上涉及的某些附加条件)。是的,对于不熟悉Grails中MVC的开发人员来说,这是一个常见的问题。我有很长一段时间被它困扰着。
def ajaxAction = { render 'foo' }