Grails迭代gsp与访问Map元素

avg*_*tvs 3 grails gsp

完整上下文:我正在尝试使用grails应用程序处理多个文件.我将显示的代码来自后处理页面,它提供有关已处理文件的信息.

我最初的感觉是使用这样的代码:

    <table>
      <tr>
        <th>Parsed from Excel:</th>
        <th>Uploaded to DS:</th>
        <th>File Name:</th>
        <th>Size:</th>
      </tr>
      <tr>
      <g:each in="${fileContents}" var="item">
            <td>${item}</td>
      </g:each>
        <%-- 
        <td>${fileContents.ExcelRows?.encodeAsHTML()}</td>
        <td>${fileContents.policies?.encodeAsHTML()}</td>
        <td>${fileContents.originalFileName?.encodeAsHTML()}</td>
        <td>${fileContents.Size?.encodeAsHTML()}</td>
        --%>
      </tr>
    </table>
Run Code Online (Sandbox Code Playgroud)

现在,我不明白为什么<g:each循环中显示的内容总是报告,key=value例如ExcelRows=14我在一个输出案例中收到的内容.

当我切换注释(注意使用的<%--标签)时,它完全按预期工作.从我的" ExcelRows"栏目中,我得到的只是"14".我认为<g:each循环应该做同样的事情有什么问题?直观地说,它归结为For each item in fileContents display item.

我的控制器代码:

def processFile = {
        def uploadedFile = request.getFile('excelFile')
Run Code Online (Sandbox Code Playgroud)

//...snipped

        def fileContents = [
            ExcelRows:"${ods.numberOfRows}",
            policies:"${ods.numberOfPolicies}",
            originalFileName: "${ods.originalFilename}", 
            Size:"${ods.size}"
            ]

        [fileContents:fileContents]
    }
Run Code Online (Sandbox Code Playgroud)

Rob*_*ska 9

迭代地图时,你将使用Entrys.尝试使用:

<g:each in="${fileContents}" var="item">
   <td>${item.value?.encodeAsHTML()}</td>
</g:each>
Run Code Online (Sandbox Code Playgroud)

要么

<g:each in="${fileContents.values()}" var="item">
   <td>${item?.encodeAsHTML()}</td>
</g:each>
Run Code Online (Sandbox Code Playgroud)