Grails标记库重置属性

Grails标记库重置属性,grails,taglib,Grails,Taglib,我有以下问题。我创建了一个TagLibrary,其中列出了给定的集合if数据,如下所示 class LisTagLib { static final CONTEXT = this.class.name /** * Current data from collection */ def currentData; String columnHeaders = ""; List

我有以下问题。我创建了一个TagLibrary,其中列出了给定的集合if数据,如下所示

    class LisTagLib {

        static final CONTEXT = this.class.name
        /**
         * Current data from collection
         */
        def currentData;
        String columnHeaders = "";
        List writtenHeaders = [];

        // draw main table
        Closure listTable = { attrs, body ->

            def writer = getOut()

            writer << "<table>";
            writer << "<thead>"
            writer << "<tr>"
            writer << columnHeaders
            writer << "</tr>"
            writer << "</thead>"
            writer << "<tbody>"

            if(attrs.source){
                attrs.source.each() { value ->
                    writer << "<tr>";
                    writer << body()
                    writer << "</tr>";
                }
            }

            // output the body
            writer << "</tbody>";
            writer << "</table>";
        } 
.
.
.
}

在列表表的开头或结尾,闭包将删除所有列标题,并且不打印任何标题。

标记库是单例的,因此类范围字段(如
currentData
columnHeaders
)和
writtenHeaders
)由所有请求共享。Springbeans默认为单例,Grails中就是这种情况,但控制器是根据请求创建的,可以有状态(但不应该)

解决方法是将这些字段作为变量移动到标记体中,并在需要时将它们作为参数传递给帮助器方法,而不是将它们作为类字段引用


p、 s.丢失分号:)

标记库是单例的,因此所有请求都共享类作用域字段,如
currentData
columnHeaders
、和
writenHeaders
。Springbeans默认为单例,Grails中就是这种情况,但控制器是根据请求创建的,可以有状态(但不应该)

解决方法是将这些字段作为变量移动到标记体中,并在需要时将它们作为参数传递给帮助器方法,而不是将它们作为类字段引用

p、 s.丢失分号:)

columnHeaders = "";