如何从已在控制器操作中调用的taglib返回值,以便它自动保留taglib中值设置的完整类型结构?
我可以使用out <<
方法,但这会返回字符串或字符串数组。
我尝试使用[]
映射,将操作结束时的一组值传输到其视图。
我再次尝试了return
语句失败 - 除此之外我需要返回多组值。
-Mike
答案 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对象,其中包含你需要的所有信息并做同样的技巧。