2

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]
----------
4

1 に答える 1

3

あなたのモデルrootには がないからmcです。

この場合、フリーマーカーを呼び出す代わりにresults入れているので、使用できますrootmc.getAll()root

そう

<#list restults as result>

または、キーを使用してモデル()にMainServiceインスタンスを追加する必要がありますmsrootmc

Map<String, Object> root = new HashMap<String, Object>();
root.put("mc", ms);
于 2013-06-26T03:45:11.530 に答える