2010-06-02 9 views
2

J'essaye de créer une chaîne multiligne dans Groovy. J'ai une liste de chaînes que je voudrais faire défiler dans la chaîne multiligne. Je ne suis pas sûr de la syntaxe pour cela. Quelque chose comme ci-dessous ...Boucle traversant la liste dans une chaîne multi-lignes Groovy

def html = """\ 
     <ul> 
      <li>$awaiting.each { it.toPermalink()}</li> 
     </ul> 
    """ 

Répondre

5

qui suit:

class PLink { 
    String name 
    String toPermalink() { 
    "link->$name" 
    } 
} 
def awaiting = [ new PLink(name:'one'), new PLink(name:'two'), new PLink(name:'three') ] 
def html = """<ul> 
    <li>${awaiting.collect { it.toPermalink() }.join("</li><li>")}</li> 
</ul>""" 

produit cette sortie:

<ul> 
    <li>link->one</li><li>link->two</li><li>link->three</li> 
</ul> 

Il appelle essentiellement la méthode sur chaque élément, collects les résultats dans une autre liste , puis joins la liste ensemble dans une chaîne

1

Avez-vous envisagé d'utiliser un MarkupBuilder? Ils fournissent une très bonne façon de construire du HTML ou du XML, surtout si vous voulez intégrer des constructions en boucle ou une logique conditionnelle.

Par exemple:

import groovy.xml.MarkupBuilder 

def writer = new StringWriter() 
def builder = new MarkupBuilder(writer) 

def awaiting = ['one', 'two', 'three'] 

builder.html { 
    ul { 
     awaiting.each { 
      li(it.toString()) 
     } 
    } 
} 

println writer.toString() 

Résultats dans:

<html> 
    <ul> 
    <li>one</li> 
    <li>two</li> 
    <li>three</li> 
    </ul> 
</html>