【问题标题】:Grails taglib resetting the propertiesGrails taglib 重置属性
【发布时间】:2012-10-04 02:41:37
【问题描述】:

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

    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>";
        } 
.
.
.
}

我的问题是每次调用这个 taglib 时都没有创建“columnHeaders”属性。如果我在第 X 页然后在第 Y 页中调用它,则第 Y 页的标题也称为“第 X 页中显示的标题 + 第 Y 页中显示的标题”。我尝试了构造函数,但是这个类在编译时只构造一次。有什么解决方案。每次调用此标记库时如何重置这些值? 顺便说一下

columnHeaders = "";

在listTable闭包的开头或结尾删除所有columnHeaders并且不打印任何标题。

【问题讨论】:

    标签: grails taglib


    【解决方案1】:

    标签库是单例的,因此所有请求都共享 currentDatacolumnHeaderswrittenHeaders 等类范围字段。 Spring bean 默认为单例,在 Grails 中就是这种情况,但控制器是按请求创建的并且可以具有状态(但不应该)。

    解决方法是将这些字段作为变量移动到标签正文中,并在需要时将它们作为参数传递给辅助方法,而不是将它们称为类字段。

    附言丢掉分号:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多