以下是从Grails website获得的代码片段。
<script>
function messageKeyPress(field,event) {
var theCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
var message = $('#messageBox').val();
if (theCode == 13){
<g:remoteFunction action="submitMessage" params="\'message=\'+message" update="temp"/>
$('#messageBox').val('');
return false;
} else {
return true;
}
}
function retrieveLatestMessages() {
<g:remoteFunction action="retrieveLatestMessages" update="chatMessages"/>
}
function pollMessages() {
retrieveLatestMessages();
setTimeout('pollMessages()', 5000);
}
pollMessages();
</script>
以上代码有效,但当我添加Controller
时,它停止了工作。我的意思是记录保存在数据库中,但我无法检索数据并在屏幕上显示。
这就是我做的
<g:remoteFunction controller="message" action="retrieveLatestMessages" update="chatMessages"/>
MessageController
功能如下:
@Secured([ 'ROLE_USER'])
def retrieveLatestMessages() {
println "test"
def messages = Message.listOrderByDate(order: 'desc', max:1000)
[messages:messages.reverse()]
println messages
}
执行上述控制器功能(我在控制台上看到println
语句),但数据没有在屏幕上填充。
有人可以帮助我吗
更新
[{&#34;类&#34;:&#34; myPro.Message&#34;&#34; ID&#34;:3,&#34;日期&#34;:&#34; 2014 -07-23T17:31:58Z&#34;&#34;消息&#34;:&#34; dfdf&#34;&#34;名称&#34;:&#34;喜&#34;},{ &#34;类&#34;:&#34; myPro.Message&#34;&#34; ID&#34;:2&#34;日期&#34;:&#34; 2014-07-23T17: 31:56Z&#34;&#34;消息&#34;:&#34; dfdfdf&#34;&#34;名称&#34;:&#34; DD&#34;},{&#34;类& #34;:&#34; myPro.Message&#34;&#34; ID&#34;:1,&#34;日期&#34;:&#34; 2014-07-23T17:31:18Z&#34 ;,&#34;消息&#34;:&#34; XXXX&#34;&#34;名称&#34;:&#34; FIE&#34;}]
答案 0 :(得分:0)
您的方法 - 您的案例中的retrieveLatestMessages()
操作 - 必须返回model
,但它会返回println
的输出。
要使代码正常工作,您必须将model
放在最后一行,或使用return
语句显式返回:
def retrieveLatestMessages() {
println "test"
def messages = Message.listOrderByDate(order: 'desc', max:1000)
println messages
[messages:messages.reverse()]
}
答案 1 :(得分:0)
试试这个
import grails.converters.JSON
@Secured([ 'ROLE_USER'])
def retrieveLatestMessages() {
println "test"
def messages = Message.listOrderByDate(order: 'asc', max:1000)
render messages as JSON
}
享受。
答案 2 :(得分:0)
我有这个示例应用程序在我的网站上运行没有任何问题,但事情就是这个,这个过程要求你一致地轮询页面,这是资源密集型的:
我最后写了一个绑定到数据源的domainClass,该数据源使用的是HQL数据库,并且不在我自己的应用程序中,该过程需要一个数据库表来流式聊天....
替代方案是远离轮询并使用websockets:
查看此视频
https://www.youtube.com/watch?v=8QBdUcFqRkU
然后查看此视频
https://www.youtube.com/watch?v=BikL52HYaZg
最后看看这个:
https://github.com/vahidhedayati/grails-websocket-example
这已经更新,包括使用winsocket进行简单聊天的第二种方法....