<input type="button" value="report3" onclick="window.location.href='<g:createLink controller="report" action="bar3" />'"></input>
<input type="button" value="report4" onclick="window.location.href='<g:createLink controller="report" action="bar4" />'"></input>
<input type="button" value="pie1" onclick="window.location.href='<g:createLink controller="report" action="pie1" />'"></input>
<input type="button" value="pie2" onclick="window.location.href='<g:createLink controller="report" action="pie2" />'"></input>
<input type="button" value="pie3" onclick="window.location.href='<g:createLink controller="report" action="pie3" />'"></input>
<input type="button" value="xy" onclick="window.location.href='<g:createLink controller="report" action="xy" />'"></input>
<input type="button" value="scatter" onclick="window.location.href='<g:createLink controller="report" action="scatter" />'"></input>
<input type="button" value="water" onclick="window.location.href='<g:createLink controller="report" action="water" />'"></input>
一共十多行相同的button语句,虽然可以使用“拷贝”和“粘贴”的方法很快写完这些代码,但这一行行的代码长度太长,以至于超过了显示屏的长度,使得维护起来相当的困难。
于是我想使用Template来减少代码行的长度,使得代码在视线范围内,这样便于维护。过程:
(1)一般来说,以下划线开头的文件名的gsp文件都是Template,所认把第一个Template命名为_test.gsp:
<input type="button" value="${value}" onclick="window.location.href='<g:createLink controller="${control}" action="${action}" />'"></input>
可以看到,这个Template内容是否简单,包含三个变量:value、control和action。
(2)我们怎么来使用这个Template呢?
<g:render template="test" model="[value:'nulti',control:'report',action:'multi']"/>
第一个使用<g:render>标签,template为去掉下划线的Template文件名,即test,最后在model里传递Template所需要三个参数。
另一个例子
我们经常需要在每一个面开头捕捉一些出错信息,如下:
<g:if test="${flash.error}">
<div class="errors">${flash.error}</div>
</g:if>
现在把它做成Template
_message.gsp
<g:if test="${flash.error}">
<div class="errors">${flash.error}</div>
</g:if>
<g:if test="${request.error}">
<div class="errors">${request.error}</div>
</g:if>
<g:if test="${flash.errors}">
<div class="errors">
<g:each in="${flash.errors}" var="error">
${error}<br>
</g:each>
</div>
</g:if>
<g:if test="${request.errors}">
<div class="errors">
<g:each in="${request.errors}" var="error">
${error}<br>
</g:each>
</div>
</g:if>
下面怎么使用呢?
<g:render template="message"/>
另外Template还能传递对象
_collection.gsp
<g:each in="${users}" var="user">
name: ${user?.name}<br>
</g:each>
<g:render template="collection" var="users" collection="${users}" />
最后欢迎大家访问我的个人网站:1024s