Posted on 2010-12-01 12:32
asdtiang 阅读(886)
评论(0) 编辑 收藏
grails ajax分页标签实现--不带参数续传的
http://www.blogjava.net/asdtiang/archive/2010/11/26/339127.html
这次有了新的需求,比如说在结果中查询--查询结果用的是这个分页,那么参数不继续传的话,就会出错了
只是更改了上次的tagLib类:
代码如下:
import org.springframework.web.servlet.support.RequestContextUtils as RCU;
import org.codehaus.groovy.grails.commons.ConfigurationHolder
class AjaxPageTagLib {
def paginateAjax={attrs ->
def writer = out
//获取其它的参数
def params1=new HashMap()
params1.putAll(params)
params1.remove("max")
params1.remove("offset")
params1.remove("controller")
params1.remove("action")
def otherParamsUrl=""
params1.each{
otherParamsUrl=otherParamsUrl+it.toString()+"&"
}
params.offset = Math.min(params.offset ? params.offset as int : 0, 100)
params.sort=params.sort==null?"dateCreated":params.sort
params.order=params.order==null?"desc":params.order
def messageSource = grailsAttributes.getApplicationContext().getBean("messageSource")
def locale = RCU.getLocale(request)
def total = attrs.total.toInteger()
def offset = params.offset?.toInteger()
def max = params.max?.toInteger()
int pageSize=Math.round(Math.ceil(total / max))
def path=request.getContextPath()
def pageNow=offset/max+1
def selectMax=attrs.selectMax?.toInteger()
if(!selectMax){
selectMax=20
}
selectMax=selectMax>total?total:selectMax
////js输出
writer<<"""
<div id="ajaxPage">
"""
/////显示首页和上页
def firstText=messageSource.getMessage('paginate.first', null, messageSource.getMessage('default.paginate.first', null, 'First', locale), locale)
def prevText=messageSource.getMessage('paginate.prev', null, messageSource.getMessage('default.paginate.prev', null, 'Prev', locale), locale)
def nextText=messageSource.getMessage('paginate.next', null, messageSource.getMessage('default.paginate.next', null, 'Next', locale), locale)
def lastText=messageSource.getMessage('paginate.last', null, messageSource.getMessage('default.paginate.last', null, 'Last', locale), locale)
if(offset!=0){
def firstUrl="""${otherParamsUrl}offset=0&max=${params.max}"""
writer<<"""
<span id="firstShow" title="${firstText}" onclick="new Ajax.Updater('${attrs.update}',
'${path}/${params.controller}/${params.action}',{asynchronous:true,evalScripts:true,parameters:'${firstUrl}'});
return false;" >
[${firstText}]
</span>
"""
int prev=offset-max
def prevUrl="""${otherParamsUrl}offset=${prev}&max=${params.max}"""
writer<<"""
<span id="preShow" title="${prevText}" onclick="new Ajax.Updater('${attrs.update}',
'${path}/${params.controller}/${params.action}',{asynchronous:true,evalScripts:true,parameters:'${prevUrl}'});
return false;" >
[${prevText}]
</span>
"""
}
else{
writer<<"""<span id="firstNoShow" title="${firstText}">
[${firstText}]
</span>
"""
writer<<"""<span id="preNoShow" title="${prevText}">
[${prevText}]
</span>
"""
}
////数据信息输出
writer<<"""<span id="ajaxPageInfo">当前${pageNow}/${pageSize}页(共${total})</span>"""
//下一页和末页输出,
if(offset!=max*(pageSize-1)){
int next1=offset+max
def nextUrl="""${otherParamsUrl}offset=${next1}&max=${params.max}"""
writer<<"""
<span id="nextShow" title="${nextText}" onclick="new Ajax.Updater('${attrs.update}',
'${path}/${params.controller}/${params.action}',{asynchronous:true,evalScripts:true,parameters:'${nextUrl}'});
return false;" >
[${nextText}]
</span>
"""
int last=max*(pageSize-1)
def lastUrl="""${otherParamsUrl}offset=${last}&max=${params.max}"""
writer<<"""
<span id="lastShow" title="${lastText}" onclick="new Ajax.Updater('${attrs.update}',
'${path}/${params.controller}/${params.action}',{asynchronous:true,evalScripts:true,parameters:'${lastUrl}'});
return false;" >
[${lastText}]
</span>
"""
}
else{
writer<<"""<span id="nextNoShow" title="${nextText}">
[${nextText}]
</span>
"""
writer<<"""<span id="lastNoShow" title="${lastText}">
[${lastText}]
</span>
"""
}
///到指定页连接输出
def selectUrl="&${otherParamsUrl}max=${params.max}"
writer<<"""
<span id="ajaxSelectText">转到<select id="ajaxSelect" onchange="myUpdate('${attrs.update}','${path}/${params.controller}/${params.action}'
,'${selectUrl}','${max}')">
"""
for(int j=1;j<=pageSize;j++){
if(pageNow!=j){
writer<<""" <option value ="${j}">${j}/${pageSize}</option> """
}
else{
writer<<""" <option value ="${j}" selected="selected">${j}/${pageSize}</option> """
}
}
writer<<"</select>页</span>"
////每页显示几条数据
def maxUrl="&${otherParamsUrl}offset=0"
writer<<"""
<span id="ajaxMaxText"> 每页显示</span><select id="ajaxMax" onchange="myUpdate2('${attrs.update}','${path}/${params.controller}/${params.action}'
,'${maxUrl}')">
"""
for(int j=1;j<=selectMax;j++){
if(max!=j){
writer<<"""<option value ="${j}">${j}</option>"""
}
else{
writer<<"""<option value ="${j}" selected="selected">${j}</option>"""
}
}
writer<<"</select> </div>"
}
}
天苍苍,野茫茫,风吹草底见牛羊