Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FreeMarker:将${variable}替换为集合而不是对象的实例_Java_Html_Freemarker - Fatal编程技术网

Java FreeMarker:将${variable}替换为集合而不是对象的实例

Java FreeMarker:将${variable}替换为集合而不是对象的实例,java,html,freemarker,Java,Html,Freemarker,我是新手,我正在尝试构建一个用于报告目的的HTML文件 我能够掌握一些基本知识,比如用对象替换某个${user}变量 问题: 我正在尝试使用下面的模板创建一个HTML表。${summaryTable.rowData}将被一系列的替换。1 tr是一个对象的1个实例。我无法使用下面的代码实现这一点,相反,我只从循环中获取最后一个实例 我错过了什么 请参阅下面的详细信息 模板: 输出: 实际: 预期: ==================================================

我是新手,我正在尝试构建一个用于报告目的的HTML文件

我能够掌握一些基本知识,比如用对象替换某个${user}变量

问题: 我正在尝试使用下面的模板创建一个HTML表。${summaryTable.rowData}将被一系列的替换。1 tr是一个对象的1个实例。我无法使用下面的代码实现这一点,相反,我只从循环中获取最后一个实例

我错过了什么

请参阅下面的详细信息

模板:

输出: 实际: 预期:

======================================================================== 更新1: 我已经根据下面罗比的回答更新了我的模板、代码和模型

模板:

我得到一个例外:

第100行指向


希望你能帮忙

对于列表和表,您通常应该将项放入集合中,并使用标记对其进行迭代,解释道

例如:

<table>
  <thead>...</thead>
  <tbody>
    <#list summaryTable as row>
      <tr><td>${row.foo}</td><td>${row.bar}</td>...</tr>
    </#list>
  </tbody>
</table>

我设法让它工作起来了。罗比的建议有所帮助,但他的答案并不完全正确

模板语法:

我错误地使用了list指令,需要放置root.putsummaryTable,summaryTable;在循环内部


更改后获得了正确的输出。谢谢那些帮忙的人

谢谢你的提示!我现在正在修改我的模板,并准备运行一些测试。如果您能在我试图弄清楚代码部分的语法时对其进行布局,我将不胜感激。您提供的链接没有提供该部分。再次感谢!我已经用我最近的变化更新了这个问题。PS:谢谢你的耐心。几个小时前,你就开始使用FreeMarker了。在列表标记中,你应该使用一个简单的变量名,而不是像a.b那样的名称,它只是作为每行值的占位符。您应该将更新的模板更改为${row}。我建议您通读您链接的整个快速入门。在本例中,请参阅中关于列表的部分。在典型的模板中,几乎所有的操作都是${…}if/elseif/else和list及其伙伴items/else和sep。
        // Start Building HTML
        Map<String, Object> root = new HashMap<String, Object>();
        // Header variables
        root.put("environment", envDir);
        root.put("reportDateTimeStamp", dateDir);

        // Summary Table
        for (String module : getAllModules(rawResult)) {
            SummaryTable summaryTable = new SummaryTable();
            int modPassed = getModulePassFailCount(rawResult, module).get(GlobalUtil.reportLabelPassed);
            int modFailed = getModulePassFailCount(rawResult, module).get(GlobalUtil.reportLabelFailed);

            summaryTable.setRowData(
                    getSummaryData(module, Integer.toString(modPassed), Integer.toString(modFailed)));
            root.put("summaryTable", summaryTable);
        }

        DetailsTable detailsTable = new DetailsTable();
        detailsTable.setRowData(getDetailsData("MOD1", "TC01", "Description 01", "Passed", "00:00:00"));

        root.put("detailsTable", detailsTable);

        OutputStream outputStream = new FileOutputStream(htmlResultFile);
        Writer out = new OutputStreamWriter(outputStream, charSet);
        temp.process(root, out);
        out.close();
public static class SummaryTable {
    private String rowData;

    public String getRowData() {
        return rowData;
    }

    public void setRowData(String rowData) {
        this.rowData = rowData;
    }
}
....
            <thead>
               <tr id="header">
                  <td><b>Module</b></font></td>
                  <td><b>Passed</b></font></td>
                  <td<b>Failed</b></font></td>
               </tr>
            </thead>
            <tbody>
               <#list summaryTable as summaryTable.rowData>
                <tr>
                ${summaryTable.rowData}
                </tr>
               </#list>
            </tbody>
...
        // Start Building HTML
        Map<String, Object> root = new HashMap<String, Object>();
        // Header variables
        root.put("environment", envDir);
        root.put("reportDateTimeStamp", dateDir);

        // Summary Table
        ArrayList<SummaryTable> summaryTable = new ArrayList<SummaryTable>();
        for (String module : getAllModules(rawResult)) {
            int modPassed = getModulePassFailCount(rawResult, module).get(GlobalUtil.reportLabelPassed);
            int modFailed = getModulePassFailCount(rawResult, module).get(GlobalUtil.reportLabelFailed);

            summaryTable.add(new SummaryTable(
                    getSummaryData(module, Integer.toString(modPassed), Integer.toString(modFailed))));
        }
        root.put("summaryTable", summaryTable);

        DetailsTable detailsTable = new DetailsTable();
        detailsTable.setRowData(getDetailsData("MOD1", "TC01", "Description 01", "Passed", "00:00:00"));

        root.put("detailsTable", detailsTable);

        OutputStream outputStream = new FileOutputStream(htmlResultFile);
        Writer out = new OutputStreamWriter(outputStream, charSet);
        temp.process(root, out);
        out.close();
public static class SummaryTable {
    private String rowData;

    public String getRowData() {
        return rowData;
    }

    public void setRowData(String rowData) {
        this.rowData = rowData;
    }

    public SummaryTable(String rowData) {
        this.rowData = rowData;
    }
}
freemarker.core.ParseException: Syntax error in template "ReportTemplate.html" in line 100, column 63:
Encountered ".", but was expecting one of:
    ","
    ">"
<table>
  <thead>...</thead>
  <tbody>
    <#list summaryTable as row>
      <tr><td>${row.foo}</td><td>${row.bar}</td>...</tr>
    </#list>
  </tbody>
</table>
    <tbody>
       <#list yourObject as anyVariable>
       <tr>
          ${anyVariable.aPropertyOfYourObject}
       </tr>
       </#list>
    </tbody>
    <tbody>
       <#list summaryTable as summaryData>
       <tr>
          ${summaryData.rowData}
       </tr>
       </#list>
    </tbody>
// Summary Table
ArrayList<SummaryTable> summaryTable = new ArrayList<SummaryTable>();
for (String module : getAllModules(rawResult)) {
    int modPassed = getModulePassFailCount(rawResult, module).get(GlobalUtil.reportLabelPassed);
    int modFailed = getModulePassFailCount(rawResult, module).get(GlobalUtil.reportLabelFailed);

    summaryTable.add(new SummaryTable(
            getSummaryData(module, Integer.toString(modPassed), Integer.toString(modFailed))));
    root.put("summaryTable", summaryTable);
}
public static class SummaryTable {
    private String rowData;

    public String getRowData() {
        return rowData;
    }

    public void setRowData(String rowData) {
        this.rowData = rowData;
    }

    public SummaryTable(String rowData) {
        this.rowData = rowData;
    }
}