Grails sImple chat - 聊天消息未显示在屏幕上

时间:2014-07-23 12:53:38

标签: grails

以下是从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;}]

3 个答案:

答案 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进行简单聊天的第二种方法....