现在 Ajax 应用十分流行,Grails 同样也做到了与时俱进,它提供了实现 Ajax 的标签。
首先为页面添加 JavaScript 库:
<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta name="layout" content="main" /> <g:javascript library="prototype" /> <g:javascript library="prototype/effects"/> <title>Search Member</title> </head>
|
然后创建一个空的 div,用于显示查询结果:<div id="message"></div>
。
修改查询按扭的代码,使之执行 Ajax 表单提交:
<g:submitToRemote action="search" update="message" value="search"/>
|
表面上看按扭没有发生什么变化,但实际上,点击 search 按扭,将提交一个 Ajax 的请求,并用返回的内容去更新 id 为 message 的 div。
接下来创建一个新的页面 listMember.gsp,专门用来显示查询返回的表格。
<g:if test="${ memberList.size() > 0 }"> <table> <tr> <th>Name</th><th>Email</th><th>Gender</th> <th>Address</th><th>Phone</th><th>Team</th> </tr> <g:each in="${memberList}" status="i" var="member"> <tr class="${(i % 2) == 0 ? 'odd' : 'even'}"> <td><g:link action="show" id="${member.id}"> ${member.name?.encodeAsHTML()}</g:link> </td> <td>${member.email?.encodeAsHTML()}</td> <td>${member.gender?.encodeAsHTML()}</td> <td>${member.address?.encodeAsHTML()}</td> <td>${member.phone?.encodeAsHTML()}</td> <td>${member.team?.teamName.encodeAsHTML()}</td> </tr> </g:each> </table> </g:if> <g:else> <p align="center">Sorry, No result meets your search criteria.</p> </g:else>
|
并修改 Action 的相关代码,使查询完成后调 listMembers.gsp 进行显示。
render(view:"listMember",model:[memberList: resultList]);
|
经过简单的改造,查询功能已经支持 Ajax 效果了,但效果还不够绚。
再修改一处,使查询结果以从小到大渐变的动画方式显示出来。只需要让 g:submitToRemote
捕捉一个 OnComplete
事件:
<g:submitToRemote action="search" update="message" value="search" onComplete="new Effect.Grow('message');"/>
|
刷新一下再次搜索,效果是不是好了许多?