2011-09-16 49 views
0

は、私はエラーを得た:Freemarker - 同じリストを2回ループする方法は?二度同じループ上で反復するとき

freemarker.template.SimpleSequencejava.util.List

最初のループ

<#assign peopleMap = context.getpeopleMapByGender()> 

<#foreach item in peopleMap["man"] > 
      ${item.first_name!"Unknown"} ${item.last_name!"Unknown"} 
</#foreach> 

第二のループ

<#foreach item1 in peopleMap["man"]> 
      ${item1.address!"Unknown"}  
</#foreach> 
にキャストすることはできません

Iそれを動作させる方法はありますか?私は間違って何をしていますか?

答えて

1

正直ではありません。この簡単な例がうまくいきます。おそらく、テンプレートを取り除き、何が起こるかを見てみましょう。 getpeopleMapByGender()は、小文字のpのタイプミスである可能性がありますが、どちらのループも機能しないことを意味します。

example.ftl

<#assign peopleMap = context.getPeopleMapByGender()> 

<#foreach item in peopleMap["man"] > 
      ${item.first_name!"Unknown"} ${item.last_name!"Unknown"} 
</#foreach> 

<#foreach item1 in peopleMap["man"]> 
      ${item1.address!"Unknown"}  
</#foreach> 

Testクラス

package grimbo.test.freemarker; 

import java.io.File; 
import java.io.OutputStreamWriter; 
import java.io.Writer; 
import java.util.Arrays; 
import java.util.HashMap; 
import java.util.Map; 

import freemarker.template.Configuration; 
import freemarker.template.DefaultObjectWrapper; 
import freemarker.template.Template; 

public class DoubleLoop { 
    public static void main(String[] args) throws Exception { 
     Configuration cfg = new Configuration(); 
     cfg.setDirectoryForTemplateLoading(new File("./src/test/freemarker")); 
     cfg.setObjectWrapper(new DefaultObjectWrapper()); 
     Template temp = cfg.getTemplate("example.ftl"); 
     Map root = new HashMap(); 
     root.put("context", new Context()); 
     Writer out = new OutputStreamWriter(System.out); 
     temp.process(root, out); 
     out.flush(); 
    } 

    public static class Context { 
     public Map getPeopleMapByGender() { 
      Map m = new HashMap(); 
      m.put("man", Arrays.asList(new Man[] { new Man(), new Man(), new Man() })); 
      return m; 
     } 
    } 

    public static class Man { 
     private String first_name = "first"; 

     public String getFirst_name() { 
      return first_name; 
     } 

     public void setFirst_name(String first_name) { 
      this.first_name = first_name; 
     } 
    } 
} 

出力

 first Unknown 
     first Unknown 
     first Unknown 

     Unknown  
     Unknown  
     Unknown  
関連する問題