Grails通过远程操作呈现模板

时间:2017-02-24 07:57:41

标签: grails

我试图通过远程操作部分更新视图

这是我的观点(home/index.gsp

<button type="button" class="btn btn-success">Update</button>
<g:render template="datetime", model="[mybean: mybean]"/>

这是我的模板(home / _datetime.gsp)

<p>Time: ${mybean.getHours()} : ${mybean.getMinutes()} : ${mybean.getSeconds()}</p>

这是我的js

$("button.btn-success").click(function(event){
    $.post("/home/updateTime")
})

这是我的控制器

class HomeController {

    def index() {
        def bean = new MyDateBean()
        render view:"index", model:[mybean:bean]
    }

    def updateTime(){
        log.debug("Updating time")
        def bean = new MyDateBean()
        render template:"datetime", model:[mybean:bean]
    }


    class MyDateBean{

        private String hours
        private String minutes
        private String seconds

        MyDateBean(){
            def date = new Date()
            this.hours = date.format("H")
            this.minutes = date.format("m")
            this.seconds = date.format("s")
        }

        String getHours(){
            return this.hours
        }

        String getMinutes(){
            return this.minutes
        }

        String getSeconds(){
            return this.seconds
        }
    }   
}

如果我浏览到/home/index,模板会正确呈现,但是当我单击该按钮时,模板不会更新。为什么呢?

2 个答案:

答案 0 :(得分:1)

将模板包裹在div中,例如

void recordData(char *filename) 
{ 
    wRecord.open(filename, std::ios_base::app);
    ...
}

然后使用以下javascript:

<div id="dtsDiv">
    <g:render template="datetime" model="[mybean: mybean]"/>
</div>

答案 1 :(得分:0)

我认为以上评论可以解答您对渲染模板的担忧。注释指出,当您触发jquery方法(ajax)时,会向控制器发出一个请求,并且可以使用

进行捕获
if (request.xhr) {
 render template:'template'
 return
}
// since we return above no need for else and so hence otherwise
render view: 'view'

当向控制器发出ajax请求时,只能返回一个模板,因此除了Mike建议呈现响应文本之外,你自己的注释实际上是错误的。

无论如何,我的答案的理由与实际问题无关,更多地与groovy vs java方法的简易性有关

<p>Time: ${mybean.hours} : ${mybean.minutes} : ${mybean.seconds}</p>

class HomeController {

def index(MyDateBean bean) {
    render view:"index", model:[mybean:bean]
}

def updateTime(MyDateBean bean){
    log.debug("Updating time")
    render template:"datetime", model:[mybean:bean]
}


class MyDateBean{

    def date=new Date()

    String getHours(){
        return  date.format("H")
    }

    String getMinutes(){
        return  date.format("m")
    }

    String getSeconds(){
        return  date.format("s")
    }
}   
}