我在我的域类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中调用此方法以将其应用于文本字段?
答案 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}"/>