Итерации Grails в gsp против доступа к элементам карты - PullRequest
3 голосов
/ 09 августа 2011

Полный контекст: я пытаюсь обработать несколько файлов с помощью приложения 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>

Теперь я не понимаю, почему содержимое, отображаемое в цикле <g:each, всегда сообщает key=value такоекак ExcelRows=14 как я получил в одном выходном случае.

Когда я переключаю комментарии (обратите внимание на используемый тег <%--), он работает точно так, как ожидалось.Из моей колонки "ExcelRows" я получаю только "14."Что плохого в том, что я думаю, что цикл <g:each должен делать то же самое?Интуитивно все сводится к For each item in fileContents display item.

Код моего контроллера:

def processFile = {
        def uploadedFile = request.getFile('excelFile')

// ... snipped

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

        [fileContents:fileContents]
    }

1 Ответ

9 голосов
/ 09 августа 2011

При переборе карты вы будете работать с Entry с.Попробуйте использовать:

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

Или

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