如何在Dynamic Datalist(DDL)Freemarker / Velocity显示模板(Liferay 6.2)中导入Java类和Alloy-UI标记库

时间:2014-04-17 19:12:36

标签: liferay-6 velocity freemarker alloy-ui

有没有办法将Java类和Alloy-UI标记库导入Liferay 6.2动态数据列表(DDL)Freemarker / Velocity显示模板?

例如,在编辑动态数据列表portlet(DDL)的显示模板时,有没有办法导入类 WorkflowConstants.java 并使用它?

还有什么方法可以使用Display模板为Alloy-ui标签添加依赖项吗?

谢谢!

1 个答案:

答案 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