Grails懒惰下拉

时间:2012-06-26 12:18:00

标签: performance grails

我试图像在Excel中一样在Grails自动过滤器中实现。我的想法是创建一个Taglib

class FilterPanelTagLib {
static namespace = 'x'
def filterPanel = {attrs, body ->

    StringBuffer content = new StringBuffer()
    List lines = attrs.lines
    def filter = attrs.filter
    out << "<form>"
    long start = System.currentTimeMillis()
    attrs.columns.each{col->
        if(col != ''){
            List tmp = getColumnValues(lines,col)
            def value = filter?filter[col]:""
            out << "<th>" + g.select(
                onchange:"submit()",
                name:"filter."+col,
                from:tmp, 
                value:value, 
                noSelection:['ALL':'ALL'])+"</th>"
        }else {
            out << "<th> </th>"
        }
    }
    out << "</form>"
    println ((System.currentTimeMillis()-start)/1000 + " filterPanelTagLib".center(40,"-"))

}

private List getColumnValues(List lines, String column){
    List result = lines.collect{it[column]}.unique().sort() << 'ALL'
    return result
}

并在像这样的GSP中使用它:

<x:filterPanel filter="${filter}" lines="${taskList}" columns="['id',
        'label',
        'activity',
        'assignee'
        '',
        '']"/>

工作正常。我在控制器中将选定的dropbox的值作为params.filter获取,并且可以使用criteriaBuilder来获取已过滤的列表。

问题是创建每个下拉列表内容的性能。我已经测试了1000个项目的列表,大约需要3秒。对于30.000

,目标性能<2秒

任何建议都很好!

0 个答案:

没有答案