xwiki开发者指南-GroovyClassHelloWorld教程

2021-01-14 11:52:39 浏览数 (1)

一般情况下,是不建议在xwiki页面创建一个Groovy类,通常更好的方式是用Java创建代码,然后通过Script Services在XWiki页面调用。

然而,在少数情况下是需要的,如当在一个wiki页面创建一个Groovy类,在其他wiki页面复用。

XWiki语法2.0

  • 创建一个页面,例如Groovy.HelloWorldClass包含: 此页面必须由具有编程权限的用户保存。 {{groovy}} class HelloWorld { String say() { return "Hello World" } } {{/groovy}}
  • 在其他wiki页面使用这个Groovy class,假定Main.HelloWorldFromGroovy: 此页面必须由具有编程权限的用户保存。 {{include document="Groovy.HelloWorldClass"/}}

{{groovy}}

println new HelloWorld().say()

{{/groovy}}

现在,当你查看Main.HelloWorldFromVelocity页面时,你会看到:Hello World

  • 请注意,这种方式是无法在Velocity调用HelloWorld类,你需要使用一个Groovy宏来查看。
  • 几个变量如xwiki,doc,xcontext已经绑定到Groovy的执行上下文,并且可以使用。有关详细信息,请参阅脚本页面。

XWiki语法1.0

你需要使用XWiki.parseGroovyFromPage API方法。这种方法允许你从Velocity和Groovy脚本实例化一个Groovy类。

  • 创建一个新的页面,例如Groovy.HelloWorldClass包含:
    • 此页面必须由具有编程权限的用户保存。
    • 当创建一个页面,通过parseGroovyFromString以确保你闭合groovy标识符。

/* Groovy Class #* */

class HelloWorldClass

{

def xwiki

def context

void setObjects(xwiki, context)

{

代码语言:txt复制
 setXWiki(xwiki)
代码语言:txt复制
 setContext(context)

}

void setXWiki(xwiki)

{

代码语言:txt复制
 this.xwiki = xwiki

}

void setContext(context)

{

代码语言:txt复制
 this.context = context

}

String say()

{

代码语言:txt复制
 return "Hello World"

}

}

/* *# */

代码语言:txt复制
- 注意,可以把一个Velocity注释放在Groovy注释里,这样代码不会被Velocity解析。
- 正如你所看到的,我们可以在这个类里获取和存储XWiki和Context对象,以便能够使用它们

用Velocity实例化和使用你的类

  • 创建一个新的页面,例如Main.HelloWorldFromVelocity包含: #set(groovyObject = xwiki.parseGroovyFromPage("Groovy.HelloWorldClass")) groovyObject.setObjects( xwiki, context) groovyObject.say()

用Groovy实例化和使用你的类

  • 创建一个新页面,例如Main.HelloWorldFromGroovy包含: 此页面必须由具有编程权限的用户保存。 <% groovyObject = xwiki.parseGroovyFromPage("Groovy.HelloWorldClass") groovyObject.setObjects(xwiki, context) print groovyObject.say() %>

0 人点赞