有没有办法将Java类和Alloy-UI标记库导入Liferay 6.2动态数据列表(DDL)Freemarker / Velocity显示模板?
例如,在编辑动态数据列表portlet(DDL)的显示模板时,有没有办法导入类 WorkflowConstants.java 并使用它?
还有什么方法可以使用Display模板为Alloy-ui标签添加依赖项吗?
谢谢!
答案 0 :(得分:1)
您可以使用access static fields,static methods和freemarker模板中的非静态方法。这是示例程序。
自定义常量类但您可以在life ray中使用WorkflowConstants来访问相同的
public class WorkflowConstants {
public static int ACTION_SAVE_DRAFT = 1;
public static String CONTEXT_COMPANY_ID = "MTRX_78";
// static method
public static String test() {
return "executed Constant#test()";
}
}
// FooCallMethod类
public class FooCallMethod {
public static void main(String[] args) throws Exception {
Configuration config = new Configuration();
config.setClassForTemplateLoading(FooCallMethod.class, "");
config.setObjectWrapper(new DefaultObjectWrapper());
config.setObjectWrapper(ObjectWrapper.BEANS_WRAPPER);
Map<String, Object> dataModel = new HashMap<String, Object>();
TemplateHashModel staticModels = BeansWrapper.getDefaultInstance().getStaticModels();
dataModel.put("statics", staticModels);
TemplateHashModel fileStatics = (TemplateHashModel) staticModels
.get("java.io.File");
Cal cal = new Cal();
dataModel.put("cal", cal);
dataModel.put("File", fileStatics);
Template template = config.getTemplate("/foo.ftl");
StringWriter out = new StringWriter();
template.process(dataModel, out);
System.out.println(out.getBuffer().toString());
}
}
<强> Cal.java 强>
公共班级Cal {
public int add(int a, int b) {
return a + b;
}
public int mul(int a, int b) {
return a * b;
}
}
<强>模板强>
${statics["com.tset.WorkflowConstants"].test()}
${statics["com.tset.WorkflowConstants"].ACTION_SAVE_DRAFT}
${statics["com.tset.WorkflowConstants"].CONTEXT_COMPANY_ID}
2+3 = ${cal.add(2,3)}
10/2 = ${cal.mul(10,2)}
${statics["java.lang.System"].currentTimeMillis()}
注意:强>
您可以在freeMarker tempalte中轻松使用Dynamic Data Lists
see here在速度中提到它,但需要使用freeMarker语法。
使用freemaker语言:更强大且完全支持taglib,velocity,使用taglib太差了
https://www.liferay.com/it/web/mika.koivisto/blog/-/blogs/using-freemarker-in-your-theme-templates Look also freemaker guide