Как передать уравнение в taglib и оценить на визуализированном GSP - PullRequest
0 голосов
/ 06 января 2012

Класс домена:

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, и любые предложения, примеры или документация для этого будут с благодарностью.

1 Ответ

0 голосов
/ 06 января 2012

персона / list.gsp

<myTag:tag1 data="${data}>
    <myTag:tag2 equation="${{record-> 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">
     ${equation(record.dataObject)}
    </g:each>
</g:each>
...