通过域列表查看并删除特定元素

时间:2012-12-28 15:46:30

标签: grails groovy

我正在使用grails 1.3.7。

我有以下域名:

class Category {

    String name;
    String categoryKey;

    Date dateCreated
    Date lastUpdated

    static constraints = {
        name(blank: false, nullable: false, maxSize:30)
        categoryKey(blank: false, nullable: false, maxSize:30)
    }

    String toString()
    {
        return name
    }
}

我在gsp中显示类别列表,如下所示:

 <g:select class="fields" valueMessagePrefix="shared.category.label" name='categoryKey'
              value="${dealInstance?.category?.categoryKey}"
              noSelection="${['': message(code: 'layouts.main.filter.select', default: '(Please select one)')]}"
              from='${categoryList.list()}' optionValue="name"
              optionKey="categoryKey"></g:select>

我需要删除其中一个项目的列表(其中categoryKey属性等于OTHER)。

def Category categoryList = Category
//categoryList.categoryKey.remove("OTHER") How to remove here maybe?
return [dealInstance: dealDetails, categoryList: categoryList ]

如何在控制器中删除它并将新列表(Minus OTHER)传递给gsp?

由于

2 个答案:

答案 0 :(得分:0)

您可以使用findAll集合函数并使用闭包来检查要删除的对象。

来自文档:

assert [2,4] == [1,2,3,4].findAll { it % 2 == 0 }

所以你可以这样做:

categoryList.findAll { << return false if 'it' is of type 'OTHER', otherwise true >> }

如果您愿意,也可以直接在视图中使用此oneliner。

答案 1 :(得分:0)

您可以在grails域中更新 toString()来执行此操作。

in toString()返回名称+“,”+ categoryKey +“,”+ lastUpdated

我正在显示没有dateCreated的字段。

您可以根据您的要求使用上述代码显示字段。