我是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教程中看到了这种方法。
我看到可能的失败:
我希望这些信息足以让别人看到我所缺少的东西
答案 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库。