2011-08-09 10 views
3

完全なコンテキスト:私はgrailsアプリケーションを使用して複数のファイルを処理しようとしています。私が表示するコードは、処理されたファイルに関する情報を提供する後処理ページから来ます。gspを反復してマップ要素にアクセスするGrails対

私の最初の感覚は、このようなコードを使用していた:<g:eachループに表示される内容は、いつも私が1に受け取ったkey=valueなどExcelRows=14として報告し、なぜ私が理解していないことである

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

、出力ケース。

私はコメントを切り替えます(<%--タグが使用されていることに注意してください)。私の "ExcelRows"列から、私はちょうど "14"を取得します。 <g:eachループが同じことをしなければならないと私の考えは間違っていますか?直観的にはFor each item in fileContents display itemになります。

私のコントローラコード:あなたはEntry秒で作業することがありますマップを反復すると

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

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

     [fileContents:fileContents] 
    } 
+0

uはあなたのコントローラのコードを投稿できますか?それはあなたのビューに 'fileContents'モデルを返すのですか? –

+0

@Arthur Neves関連コントローラコード – avgvstvs

+1

を追加しました。オブジェクトのfileContentsはマップではありません!それでキー=値を表示するのはなぜですか? –

答えて

8

を//...snipped。使用してみてください:

<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> 
+0

最初の例では何も表示されず、 '$ {fileContents.values()} 'で2番目の例が失敗しました。 – avgvstvs

+0

'fileContents'はビュー内で実際に(null以外の何かに)設定されていますか? –

+0

ええ、「​​$ {fileContents.ExcelRows?.encodeAsHTML()}「 」を使用して要素に直接アクセスできます。 – avgvstvs

関連する問題