0

假设我们要显示有关文件夹文件的信息。我们必须将每个文件的信息保存在 Map 中。然后,将这些地图添加到列表中。

控制器动作:

def show() {

    List results = new ArrayList();

    File dir = getDir(params.id);

    if (dir.exists()) {
        dir.eachFile { 

        Map fileInformation= new java.util.LinkedHashMap()

        fileInformation.put("name", it.getName());
        fileInformation.put("size", it.length());
        fileInformation.put("path", it.getAbsolutePath() );

        results.add(fileInformation);

        }
    }

    [filesOfFolderData: result]
}

也许,这是我在视图中获取数据的最佳尝试(我按照这里的方法没有运气):

<g:each in="${filesOfFolderData}">

    <p> it: ${it}</p>
    <p> it.properties: ${it.properties} </p>

    <g:each var="propertyEntry" in="${it.properties}">

        <p> propertyEntry.key: ${propertyEntry.key} </p>
        <p> propertyEntry.value: ${propertyEntry.value} </p>
        <p> propertyEntry.value.name: ${propertyEntry.value} </p>           

    </g:each>

</g:each>

这是 Internet 浏览器显示的内容(注意:由于我简化了代码,因此结果的第一行可能会有所不同,因此我将其作为我案例实际结果的基础):

it: [{name=wololo1, size=35, path=c:\}, {name=wololo2, size=35, path=c:\}]

it.properties: {class=class java.util.ArrayList, empty=false}

propertyEntry.key: class

propertyEntry.value: class java.util.ArrayList

propertyEntry.value.name: class java.util.ArrayList

propertyEntry.key: empty

propertyEntry.value: false

propertyEntry.value.name: false 

我们如何迭代列表?

4

3 回答 3

2

each地图中,您可以访问keyand value,因此只需遍历该值。

<g:each in="${filesOfFolderData}" var="files">
  <g:each in="${files.value}" var="file">
    ...
  </g:each>
</g:each>
于 2013-09-03T17:56:18.593 回答
1

好吧,您可以使用下面给出的代码:示例:

filesOfFolderData= [{name=wololo1, size=35, path=c:\}, {name=wololo2, size=35, path=c:\}]

<g:each in="${filesOfFolderData}" var="fileMap">
  <g:each in="${fileMap}" var="file">
    ${file.key}: ${file.value}
  </g:each>
</g:each>

输出:

name: wololo1
size: 35
path: c:\
name: wololo2
size:35
path: c:\

希望有帮助!!!

谢谢

于 2013-09-04T06:23:22.483 回答
0

我们必须创建 Map of Maps ,而不是 Maps 列表

def show() {

    def results = []
    File dir = getDir(params.id);

    if (dir.exists()) {
        dir.eachFile {  

            results <<  [
                            name: it.getName(),
                            size: it.length(),
                            it.getAbsolutePath()
                        ]                   
        }
    }

    [filesOfFolderData: result]
}

然后,@SergioMichels 的解决方案将完美运行(我复制并粘贴他的解决方案):

<g:each in="${filesOfFolderData}" var="files">
  <g:each in="${files.value}" var="file">
    ...
  </g:each>
</g:each>
于 2013-09-03T20:30:12.577 回答