开发者

Grails/AJAX: Updating an arbitrary region in the page using g:submitToRemote

In a GSP (Groovy Server Page), I'm using <g:submitToRemote update="..."> to update a <div> after the server-side call.

According to the tag's documentation and other sources on the web, the target <div> can be placed arbitrarily at the page. In my testings, however, I 开发者_如何学运维find that the <div> needs to surround the <g:submitToRemote> tag.

If it does not, the <div> will be updated with some "random" contents (i.e., parts of the form that surround the <g:submitToRemote> tag).

Consider the following GSP code:

<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>

That's on Grails 1.3.4.

What am I missing? - Thanks


According to my testings, g:submitToRemote's action attribute must not point to the current controller's current action (as this will insert/duplicate the current view into the current view).

It works if you specify an alternate action in g:submitToRemote - i.e.,

<g:submitToRemote value="Click Me"
    action="ajaxAction" update="updateMe" />

If this action provides a model - i.e.,

def ajaxAction = { [message: 'foo'] }

then there needs to be a corresponding GSP - that, in this case, should state,

$message

Alternatively, the action can use the render method - like this,

def ajaxAction = { render 'foo' }

I'll leave this issue open for some time, in case there might be additional responses, and, if there aren't, will accept this answer as the solution.

Thanks


I think the problem is that you don't specify the controller for your action. Try adding controller="..." into your g:submitToRemote tag. Or at least specify it in g:form.

I'm sure that the <div> doesn't need to be wrapped.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜