簡體   English   中英

嘗試在Freemarker中調用Java方法時表達式未定義

[英]Expression is undefined when try to call java method in Freemarker

我嘗試從Freemarker模板調用Java方法:

我的數據類:

public class SimpleObject {

    private String id;
    private String name;
    public SimpleObject(String id, String name) {
        setId(id);
        setName(name);
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

我的服務等級:

public class MainService {

    List<SimpleObject> getAll() {
        SimpleObject so = new SimpleObject("1", "Maksim");
        List<SimpleObject> sol = new ArrayList<SimpleObject>();
        sol.add(so);
        return sol;
    }
}

轉換代碼:

MainService ms = new MainService();
Map<String, Object> root = new HashMap<String, Object>();
root.put("results", ms.getAll());
StringWriter out = new StringWriter();
Configuration cfg = new Configuration();
cfg.setObjectWrapper(new DefaultObjectWrapper());
Template temp = cfg.getTemplate(".test.ftl");
temp.process(root, out);
System.out.println(out.getBuffer().toString());

.test.ftl

<#list mc.getAll() as result>

  result.getName()

</#list>

錯誤:

Expression mc is undefined on line 3, column 8 in .test.ftl.
The problematic instruction:
----------
==> list mc.getAll() as result [on line 3, column 1 in .test.ftl]
----------

這是因為在您的模型root中沒有mc

在這種情況下,由於您將results放入root而不是在freemarker中調用mc.getAll() ,因此可以使用root

所以

<#list restults as result>

或者您需要使用鍵mcMainService實例ms添加到模型( root )中

Map<String, Object> root = new HashMap<String, Object>();
root.put("mc", ms);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM