asdtiang的博客 感谢blogjava提供的博客交流平台

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 : 0100)
        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>"
    }

    
}








天苍苍,野茫茫,风吹草底见牛羊

只有注册用户登录后才能发表评论。


网站导航:
 

posts - 80, comments - 24, trackbacks - 0, articles - 32

Copyright © asdtiang

asdtiang的博客 PaidMailz
点击广告网赚A(每天4个广告,每个0.0025美元,一个搜索广告0.03美元)