вызвать метод домена в GSP - PullRequest
1 голос
/ 15 мая 2011

Я создал метод в своем доменном классе с именем affichage(s), который может извлекать строку между <name> или <adresse>:

enter code here



def affichage(s){

def l=[]
def regex = /\<.\w*.\>/
def matcher = s =~ regex
matcher.each{match ->
l.add(match)}
l.each{ 
for (i in l){
println i
}}}}

Я запустил эту функцию в groovyConsole, и все в порядке.

Как мне вызвать этот метод в моем gsp, чтобы применить его в текстовом поле?

Ответы [ 3 ]

5 голосов
/ 15 мая 2011

Чтобы сделать это, вы должны загрузить объект домена в контроллер, а затем передать его представлению.Так что-то вроде следующего в контроллере:

// assuming theDomainObject/anotherObject are loaded, preferably via service calls
render view: 'theView', model: [object: theDomainObject, another: anotherObject]

и затем в представлении вы можете сделать

${object.yourMethod()}

${another.someprop}

примечание: в первом вы вызываете метод, в следующем выполучение собственности.Также обратите внимание, что в фигурных скобках вы можете ссылаться на то, что вы передали обратно модели в контроллере.

${...}

указывает gsp использовать объекты модели, переданные обратно.Грааль это круто.

0 голосов
/ 15 мая 2014

Вы можете создать taglib следующим образом ...

// grails-app/taglib/com/demo/ParsingTagLib.groovy
package com.demo

class ParsingTagLib {
    static defaultEncodeAs = 'html'
    static namespace = 'parsing'

    def retrieveContentsOfTag = { attrs ->
        // The regex handling here is very
        // crude and intentionally simplified.
        // The question isn't about regex so
        // this isn't the interesting part.
        def matcher = attrs.stringToParse =~ /<(\w*)>/
        out << matcher[0][1]
    }
}

Вы можете вызвать этот тег, чтобы заполнить значение текстового поля из GSP чем-то вроде этого ...

<g:textField name="firstName" value="${parsing.retrieveContentsOfTag(stringToParse: firstName)}"/>
<g:textField name="lastName" value="${parsing.retrieveContentsOfTag(stringToParse: lastName)}"/>

Если это было выполнено от контроллера, как это ...

// grails-app/controllers/com/demo/DemoController.groovy
package com.demo

class DemoController {

    def index() {
        // these values wouldn't have to be hardcoded here of course...
        [firstName: '<Jeff>', lastName: '<Brown>']
    }
}

Это приведет к тому, что HTML будет выглядеть следующим образом ...

<input type="text" name="firstName" value="Jeff" id="firstName" />
<input type="text" name="lastName" value="Brown" id="lastName" />

Надеюсь, это поможет.

UPDATE:

В зависимости от того, что вы на самом деле пытаетесь сделать, вы также можете посмотреть на завершение процесса генерации всего текстового поля внутри тега чем-то вроде этого ...

// grails-app/taglib/com/demo/ParsingTagLib.groovy
package com.demo

class ParsingTagLib {
    static namespace = 'parsing'

    def mySpecialTextField = { attrs ->
        // The regex handling here is very
        // crude and intentionally simplified.
        // The question isn't about regex so
        // this isn't the interesting part.
        def matcher = attrs.stringToParse =~ /<(\w*)>/
        def value = matcher[0][1]
        out << g.textField(name: attrs.name, value: value)
    }
}

Тогда ваш код GSP может выглядеть следующим образом ...

<parsing:mySpecialTextField name="firstName" stringToParse="${firstName}"/>
<parsing:mySpecialTextField name="lastName" stringToParse="${lastName}"/>
0 голосов
/ 25 сентября 2013

Чтобы сделать предыдущий ответ ясным.

Вы не пропустите сам домен.Вы передаете экземпляр модели как:

render(view: 'theView', model: [object: new MyDomain (), another: new YourDomain()]

Где MyDomain и YourDomain - это классы домена в Grails.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...