Grails:从taglib返回参数

时间:2014-06-05 14:25:17

标签: grails taglib

如何从已在控制器操作中调用的taglib返回值,以便它自动保留taglib中值设置的完整类型结构?

我可以使用out <<方法,但这会返回字符串或字符串数​​组。

我尝试使用[]映射,将操作结束时的一组值传输到其视图。

我再次尝试了return语句失败 - 除此之外我需要返回多组值。

-Mike

3 个答案:

答案 0 :(得分:7)

来自文档http://grails.org/doc/latest/guide/theWebLayer.html#tagReturnValue

的顶部
class ObjectReturningTagLib {

  static returnObjectForTags = ['content']

  def content = { attrs, body ->
    someValue()
  }
}

答案 1 :(得分:0)

我认为这可以解决您的问题

package com.campaign
import java.util.*;
class UserDetailsTagLib {
def springSecurityService
static namespace = "jft"
#here we are defining that this getPrincipal and getArrayListAsObj tag used to return      object
static returnObjectForTags = ['getPrincipal','getArrayListAsObj']
 #this tag will return obj
def getPrincipal = {
    return springSecurityService.principal
}
# this tag is used to return the array list of string
def getArrayListAsObj = { attrs , body ->
  ArrayList arrayList = new ArrayList();
  arrayList.add("C");
  arrayList.add("A");
  arrayList.add("E");
  arrayList.add("B");
  arrayList.add("D");
  arrayList.add("F");

  return arrayList

}

}

答案 2 :(得分:0)

我理解你的问题。如果你想从taglib获得var的Intellisense,你唯一能拥有的就是这个(它有点多余)

例如,在gsp中,如果你有一个名为myTaglib的TagLib:

首先调用taglib的动作来设置var:

的值
<myTaglib:person var="currentUserFromTaglib" />

person中的myTaglib标记仅用于此目的:

def person = { attrs ->
        this.pageScope."$attrs.var" = new Person(name:'Giuseppe', surname:'Iacobucci')
    }

在此之后,你需要写:

<g:set var="currentUser" value="${currentUserFromTaglib as Person}"/>

并加入gsp:

<%@ page import="your.package.Person" %>

之后,在gsp中currentUser被识别为Person类型。

在控制器中,您只需调用myTaglib并按如下方式投射结果:

def myvar = myTaglib.person() as Person

显然,如果你在阅读评论时需要更多的复杂对象,那么创建一个普通的UI对象,其中包含你需要的所有信息并做同样的技巧。