Класс домена:
class Person {
String firstName
String lastName
int age
}
Bootstrap:
def init = { servletContext ->
Random rand = new Random()
int max = 100
def p1
for (def iii =0; iii < 50; iii++){
p1 = new Person()
p1.with{
firstName = "Joe"
lastName = "Snuffy${iii}"
age = rand.nextInt(max+1)
save()
}
}
}
def destroy = {
}
PersonController:
class PersonController {
def list{
[data:Person.list()]
}
}
MyTagLib:
class MyTagLib {
static namespace = "myTag"
TagData tagData
def tag1 = {attr, body ->
tagData = wrapData(attr.data)
body()
out << render(template:'../mytag/content', model:[data:tagData])
}
def tag2 ={attr, body ->
setEquations(attr.equation)
}
def wrapData(List data){
TagData td = new TagData();
data.each {
DataWrapper dw = new DataWrapper(it)
td.data.add(tdw)
}
td
}
def setEquations(String equation){
tagData.equations.add(equation)
}
class TagData {
List equations = new ArrayList()
List data = new ArrayList()
}
class DataWrapper<T>{
String uniqueId
T dataObject
public DataWrapper(T dataItem){
this.uniqueId = UUID.randomUUID()
this.dataObject = dataItem
}
}
персона / list.gsp
<myTag:tag1 data="${data}>
<myTag:tag2 equation="${firstName + ' ' + lastName}>
</myTag:tag1>
MyTag / content.gsp
<g:each in="${data.data}" var="record" status="iii">
<g:each in="${data.data}" var="equation" status="jjj">
%{-- Evaluate each equation on each record --}%
</g:each>
</g:each>
Я пытаюсь получить результат:
$record['firstName'] + ' ' + $record['lastName']
или что-то вроде:
$record['age'] > 18 = true
Напечатано будет Джо Снаффи1
Как бы это было достигнуто, я пробовал несколько разных способов, и я уверен, что мы не хотим, чтобы я перечислил все способы, которые я пробовал. Я довольно новичок в Grails, и любые предложения, примеры или документация для этого будут с благодарностью.