在gsp中调用域方法

时间:2011-05-15 15:43:59

标签: grails

我在我的域类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 个答案:

答案 0 :(得分:5)

以grails方式执行,您将在控制器中加载域对象,然后将其传递给视图。所以控制器中的内容如下:

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

然后在视图中你可以做

${object.yourMethod()}

${another.someprop}

注意在第一个你正在调用一个方法,在下一个你得到一个属性。另请注意,在大括号内,您可以引用在控制器中传回模型的内容。

${...}

告诉gsp使用传回的模型对象。 grails很酷。

答案 1 :(得分:0)

使上一个答案清楚。

您没有通过域名本身。您将模型的实例传递为:

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

MyDomain和YourDomain是Grails中的域类。

答案 2 :(得分:0)

你可以像这样创建一个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" />

我希望有所帮助。

<强>更新

根据您真正想要做的事情,您可能还会考虑将整个文本字段生成内容包装在标记中,如下所示......

// 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}"/>