【问题标题】:Grails formRemote redirects rather than to just call methodGrails formRemote 重定向而不是仅仅调用方法
【发布时间】:2012-07-07 12:09:40
【问题描述】:

我是 Grails 新手,使用 g:formRemote 命令时遇到了一些问题。

我想要一个 g:textArea 框向我的控制器发送消息并保存此消息。 之后页面应该通过表单远程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-commented render template 命令与 Ajax 有关(当我不评论它时,唯一发生的事情是模板帖子将呈现在重定向页面上
  • Ajax 和 jQuery 的使用(但我不认为这是重点,因为我只使用了 g: 和 groovy 的东西,甚至还没有导入 jQuery 库)
  • 使用 remoteFunction 可能会更容易(在这种情况下,我真的不知道如何让 remoteFunction 工作)

我希望这些信息足以让别人看到我错过了什么

【问题讨论】:

    标签: ajax grails redirect groovy


    【解决方案1】:

    当在你的表单上点击提交按钮时,数据被发送到 formRemote 标签的 url 参数中列出的方法。然后你在那个方法里面,你会看到被注释掉的渲染标签,它将数据输出回在formRemote标签的更新标签中提到的div中的gsp页面。

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

    7.7.1 Ajax 支持

    默认情况下,Grails 附带 jQuery 库,但通过 插件系统提供对 Prototype 等其他框架的支持, Dojo:http://dojotoolkit.org/,Yahoo UI:http://developer.yahoo.com/yui/ 和谷歌网络工具包。本节介绍 Grails 对 阿贾克斯一般。首先,将此行添加到 你的页面:

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

    jQuery Prototype Dojo YUI MooTools

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

    【讨论】:

    • 对不起,我感觉我忘记了一些东西(要另外写)..我已经通过 导入了 lib.. 不幸的是不是问题。我试图将渲染命令留在 html 代码中,但我的控制器中的渲染命令在这个新的(不存在的) postMessage.gsp 中执行。因此,他没有让 update="history" 正确,而是尝试根据我的 action= 输入重定向到 gsp 文件。
    • 在您的浏览器的开发者工具中,您是否看到prototype.js 文件或类似文件被拉入?
    • 你是对的,prototype.js 不是由
    • 您的 formRemote 正在将会话发送到与 postMessage.gsp 视图关联的 postMessage 方法。您显示的 .gsp 的网址是什么?您可以制作已显示 postMessage.gsp 的 .gsp ,或者您可以将渲染从控制器中拉出并将其放入历史 div 并从 formRemote 中删除更新并在控制器中添加重定向,将消息变量传递给任何.gsp 你有在
    • 似乎比这个问题更重要。我尝试了一些其他方法以及一些被认为效果很好的教程。没有一个 Ajax 命令被执行。所以我认为没有必要在我编码的内容中搜索问题,而是搜索 Ajax 的缺失/不解释有什么问题。我将重新安装 Grails 并解决一些问题..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    相关资源
    最近更新 更多