簡體   English   中英

在grails中,如何使用gsp從一組域對象中構建一個用逗號分隔的鏈接列表?

[英]In grails, using gsp how do I build a comma separated list of links from a collection of domain objects?

基本上我想要的是:

<g:fancyJoin in="${myList}" var="item" separator=", ">
    <g:link controller="foo" action="bar" id="${item.id}">${item.label}</g:link>
</g:fancyJoin> 

和為

def mylist = [[id:1, label:"first"], [id:2, label:"second"]] 

它應該輸出:

<a href="foo/bar/1">first</a>, <a href="foo/bar/2">second</a>

此標簽與現有連接標簽之間的主要區別在於,在執行連接操作之前,我需要它基本上對初始列表進行收集和應用標簽

您不應該在GSP中執行此操作。 用循環和條件使視圖雜亂無章,很難維護代碼,並迫使您使用速度很慢的功能測試進行測試。 如果在taglib中執行此操作,則可以清理視圖,並且測試非常容易。

您可以定義一個自定義標簽,例如:

def eachJoin = {attrs, body ->
    def values = attrs.remove('in')
    def var = attrs.remove('var')
    def status = attrs.remove('status')
    def delimiter = attrs.remove('delimiter')

    values.eachWithIndex {entry, i ->
        out << body([
                (var ?: 'it') : entry,
                (status ?: 'i') : i
        ])

        if(delimiter && (i < values.size() - 1)) {
            out << delimiter
        }
    }
}

用法:

<g:eachJoin in="${myList}" var="item" delimiter=", ">
    <g:link controller="foo" action="bar" id="${item.id}">${item.label}</g:link>
</g:eachJoin> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM