Grails formRemote重定向而不是仅调用方法

时间:2012-07-07 12:09:40

标签: ajax grails redirect groovy

我是Grails的新手,并且使用g:formRemote命令遇到了一些问题..

我想要一个g:textArea框向我的控制器发送消息并保存此消息。 之后,页面应通过 formRemote Ajax 进行更新,以便消息显示在页面上。

但是,不是更新页面,formRemote调用假定给定的URL是真正的链接,并希望我重定向到这个(不存在的).jsp站点。
我想要启动的方法在我的控制器中调用

我尝试了许多类似问题的解决方案,但似乎这个问题与他们的问题不同

下面是代码:

<div id="history">
    <g:render template="posts" collection="${ messages }" var="message" />
</div>
<div class="postMessageForm">
    <g:formRemote name="postChatMessage" url="[controller: 'meetingRoom', 
                  action: 'postMessage']" update="history">                             
    <div class="msg_box">
        <g:textArea name="message" value="" style="width: 630px"/><br/>
    </div>
    <div style="float: right;">
        <g:submitButton name="Send" style="width: 90px; height: 40px;"/>
    </div>
    </g:formRemote>
</div>

这是在MeetingRoomController中调用的Action:

def postMessage() {
if (params.message != "") {
    def thisUser = lookUpUser()
    def thisRoom = thisUser.joinedRoom
    def chatPost = new ChatPost(
        message: params.message,
        author: thisUser
    )
    thisRoom.addToChatHistory(chatPost)
}
//  def messages = currentChatHistory()
//  render template: 'posts', collection: messages, var: 'message'

我在Jeff Browns Twitter教程中看到了这种方法。

我看到可能的失败:

  • out-gramented render template命令与Ajax有关(当我不评论它时,唯一发生的事情是模板帖子将在重定向的页面上呈现
  • 使用Ajax和jQuery(但我不相信这可能是重点,因为我只使用了g:和groovy的东西,甚至没有导入jQuery lib)
  • 使用remoteFunction可能会更容易(我真的不知道在这种情况下如何让remoteFunction工作)

我希望这些信息足以让别人看到我所缺少的东西

1 个答案:

答案 0 :(得分:1)

在表单上单击提交按钮时,数据将发送到formRemote标记的url参数中列出的方法。然后你进入那个方法,进入注释掉的render标签,将数据输出回formRemote标签的update标签中提到的div中的gsp页面。

formRemote依赖于一个javascript库来处理grails文档中提到的ajax:

  

7.7.1 Ajax支持

     

默认情况下,Grails附带了jQuery库,但通过   插件系统为其他框架提供支持,例如Prototype,   Dojo:http://dojotoolkit.org/,Yahoo UI:http://developer.yahoo.com/yui/   和Google Web Toolkit。本节介绍Grails对此的支持   一般的Ajax。要开始使用,请将此行添加到标记中   你的页面:

     

你可以用任何替换jQuery   您安装的插件提供的其他库。这有效   因为Grails支持自适应标记库。谢谢   Grails的插件系统支持许多不同的Ajax   图书馆包括(但不限于):

     

jQuery Prototype Dojo YUI MooTools

因此,删除历史div中的内容,取消注释postMessage方法中的两行,并包含一个引用的javascript库。