0 velocity scriptengine sling aem
我正在使用带有 CQ5 的速度模板。我安装的速度脚本引擎可以识别预定义的 CQ 对象。我想知道如何将用户定义的java对象传递给速度脚本引擎。我尝试了类似的东西: http ://groovy.codehaus.org/JSR+223+Scripting+with+Groovy
但它不起作用..请帮我解决这个情况
提前致谢
您只需要使用VelocityContext传递对象参数,如context.put("name_of_parameter", yourOBject);
在我的示例中test.temalate,$person.address意味着调用 person 对象的地址 getter 方法。
示例:尝试如下
Person.java public class Person { private String 名称; 私有字符串地址;
public Person(String name, String address) {
this.name = name;
this.address = address;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAddress(String address) {
this.address = address;
}
public String getAddress() {
return address;
}
}
Run Code Online (Sandbox Code Playgroud)
测试.java
import java.io.StringWriter;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
public class Test {
public static void main(String[] args) {
VelocityEngine ve = new VelocityEngine();
ve.init();
Template template = ve.getTemplate("test.template");
VelocityContext context = new VelocityContext();
context.put("person", new Person("Jhon", "London"));
StringWriter writer = new StringWriter();
template.merge(context, writer);
System.out.println(writer.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
测试模板
<table>
<tr>
<td>Name</td>
<td>$person.name</td>
</tr>
<tr>
<td>Address</td>
<td>$person.address</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
您将得到如下输出。
<table>
<tr>
<td>Name</td>
<td>Jhon</td>
</tr>
<tr>
<td>Address</td>
<td>London</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)