我有一個自定義標籤,因爲我想包裝G:每個自定義標籤g.each衝突,每個封閉
def myEach = { attrs, body ->
out << "${g.each(in:attrs.in, var:attrs.var, status:attrs.status) { 'test' }}"
}
但因爲它是與每個封閉混淆了每個標籤獲取錯誤。任何方式我可以做到這一點?最糟糕的情況是我會輸出一個包含每個標籤的gsp頁面。
我有一個自定義標籤,因爲我想包裝G:每個自定義標籤g.each衝突,每個封閉
def myEach = { attrs, body ->
out << "${g.each(in:attrs.in, var:attrs.var, status:attrs.status) { 'test' }}"
}
但因爲它是與每個封閉混淆了每個標籤獲取錯誤。任何方式我可以做到這一點?最糟糕的情況是我會輸出一個包含每個標籤的gsp頁面。
你完全可以註冊自己的標籤以同樣的方式Grails的作用:
import org.apache.commons.lang.StringUtils;
import org.codehaus.groovy.grails.web.taglib.GroovySyntaxTag;
import org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException;
public class Whatever extends GroovySyntaxTag {
public static final String TAG_NAME = "youreach";
public void doStartTag() {
String in = attributes.get(ATTRIBUTE_IN);
if (StringUtils.isBlank(in)) {
throw new GrailsTagException("Tag [" + TAG_NAME + "] missing required attribute [" + ATTRIBUTE_IN + "]", parser.getPageName(), parser.getCurrentOutputLineNumber());
}
doEachMethod(in);
}
public void doEndTag() {
endEachMethod();
}
public String getName() {
return TAG_NAME;
}
@Override
public boolean isKeepPrecedingWhiteSpace() {
return true;
}
@Override
public boolean isAllowPrecedingContent() {
return true;
}
}
然後在Bootstrap.groovy
,註冊這個班級作爲標籤。
GrailsTagRegistry.instance.registerTag(Whatever.TAG_NAME, Whatever.class)
您可以創建自己的類,它擴展GroovySyntaxTag
操縱任何方法在那裏。然後讓這個類擴展它。
我可以使用我自己的命名空間嗎?而不是克,用另一個? – JavaDev
這可能是我想的東西,但單引號沒有幫助,例如:
def myEach = { attrs, body ->
out << "${g.'each'(in:attrs.in, var:attrs.var, status:attrs.status) { 'test' }}"
}
有了,你會得到同樣的錯誤...
我的解決方案是使用groovyPagesTemplateEngine
豆。這樣,您可以解析字符串模板:
def myEach = { attrs, body ->
attrs.content = "test"
String template = "<g:each in='${attrs.in}'>${attrs.content}</g:each>"
groovyPagesTemplateEngine.createTemplate(template, 'mytemplate').make([attrs:attrs]).writeTo(out)
}
UPDATE如果你想打電話標,吊牌,只是嘗試調用它,如:
//ApplicationTagLib g
def myEach = { attrs, body ->
out << g.each([in:attrs.in, var:attrs.var, status:attrs.status]) {
'test'
}
}
OLD
如果要將字符串放入輸出中,請嘗試使用標準字符串,而不是GroovyString。不"${g.each....}"
,但'${g.each....}'
:
out << '${g.each(in:attrs.in, var:attrs.var, status:attrs.status) { \'test\' }}'
或者只是逃避$
:
out << "\${g.each(in:attrs.in, var:attrs.var, status:attrs.status) { 'test' }}"
我認爲第一個會在視圖中打印g.each,而不是解析標籤。 –
當然。據我所知這是JavaDev想要的。或者我錯過了什麼? –
對不起,如果我有點不清楚。我想創建自己的g:每個都需要g:每個行爲。 '測試'只是列表中每個實例呈現的示例內容。 – JavaDev
嘗試單引號 –
...圍繞每個。 – dmahapatro
你期待什麼結果? –