2017-09-28 2 views
0

J'ai créé une classe de balise personnalisée dans mon application, illustrée ci-dessous.Grailles 3: Sortie de balises personnalisées affichées sous la forme d'une chaîne à l'avant

class CustomTagLib { 
    static defaultEncodeAs = [taglib:'html'] 
    static encodeAsForTags = [tagName: [taglib:'html'], otherTagName: [taglib:'html']] 
    def selectList = { attrs ,body -> 
     try{ 
      String servName=attrs.service 
      String servMethod=attrs.method 
      ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(session.getServletContext()) 
      def myservice=ctx."${servName}" 
//   def myservice = Holders.getApplicationContext().getBean(servName); 

      attrs.from = myservice.invokeMethod(servMethod,null); 

      out << g.select(attrs) 
     }catch(Exception e){ 
      println("Exception in CustomTagLib in method selectList:"+e) 
     } 
    } 
} 

mais la sortie est affichée sous forme de chaîne comme indiqué ci-dessous. enter image description here

Veuillez donner des suggestions pour résoudre ce problème.

Répondre

1

Vous pouvez essayer d'ajouter votre code de rendu à un modèle, par exemple.

def from = myservice.invokeMethod(servMethod,null); 

out << render(template: "/templates/dropdown", 
     model: [from: from]) 

Puis, en /views/templates/_dropdown.gsp

<g:select from="${from}" /> 

Vous pouvez bien sûr passer plus d'arguments au modèle.