Grails刷新div

时间:2011-12-10 23:30:07

标签: ajax grails html

我的网站上有这样的内容:

<body>
<div id="1">
content1
</div>
<div id="2">
content2
</div>

<g:render template="/layouts/aa1"/>

<g:form name="myForm" action="myaction">
<g:submitButton name="update" value="Update" />
</g:form>
</body>

我的aa1布局是这样的:

<div id="3">
       <g:each in="print">
       ${it.carModel}
       </g:each>

</div>

控制器是:

def updateDiv = {
def max = 20
def offset = 0 
   if(params=["myForm"]){
       def print = Cars.list(max: max, offset: offset + 10)
   }
render(template:'aa1', [print: print])
}

我想做的是,当我点击“更新”时,再次调用g:render并使用ajax更新(仅更新该部分),并且值会更改。每次点击,显示接下来的20辆车。我怎么能做到这一点?我正朝着正确的方向前进吗?

1 个答案:

答案 0 :(得分:4)

Grails有一个标记formRemote,可以为您完成此操作。 基本上,不使用常规form标记,而是使用formRemote标记,指定要调用的控制器和操作以及要使用结果更新的dom元素。 您还可以查看执行类似操作的submitToRemote代码。

我已经在正确的方向上找到了一些代码。它未经过测试,因此可能存在错误

控制器:

def updateDiv = {
    def max = 20
    def offset = 0 

    if(params=["myForm"]){
       def print = Cars.list(max: max, offset: offset + 10)
    }

    render(template:'aa1', collection:print, var:'car')
}

GSP:

<body>
    <div id="1">
        content1
    </div>
    <div id="2">
        content2
    </div>

    <g:formRemote name="myForm" on404="alert('not found!')" update="3"
              url="[ controller: 'YourControllerName', action:'updateDiv' ]">
        Book Id: <input name="id" type="text"></input>
    </g:formRemote>

    <div id="3">
         <g:render id="" template="/layouts/aa1" collection="${print}"/>
    </div>
</body>

TEMPLATE:

${car.carModel}