freemarker 直接使用List来遍历set集合,可能会报错


转摘:http://www.javaweb1024.com/java/JavaWebzhongji/2015/04/08/528.html

freemarker  直接使用List来遍历set集合,可能会报错! 错误如下 

Java代码

private Set<Article> articles = new HashSet<Article>();

Freemarker中遍历

[#list category.articles?chunk(5) as article1]
     <div>
         <ul>
              [#list article1 as article ]
                [#assign articleDesc=i18n_description(article.articleDescriptions,true)/]
                [#if articleDesc!=null]
         ${abbreviate(articleDesc.title, 80, "...")}
         [/#if]
            [/#list]
          </ul>
      </div>
 [/#list]

 报错信息

Underlying collection is not a list, it's org.hibernate.collection.internal.PersistentSet

freemarker.template.TemplateModelException: Underlying collection is not a list, it's org.hibernate.collection.internal.PersistentSet

         at freemarker.ext.beans.CollectionModel.get(CollectionModel.java:127)

         at freemarker.core.SequenceBuiltins$chunkBI$ChunkedSequence$1.get(SequenceBuiltins.java:792)

         at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:176)

         at freemarker.core.Environment.visit(Environment.java:428)

         at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102)

         at freemarker.core.Environment.visit(Environment.java:221)

         at freemarker.core.MixedContent.accept(MixedContent.java:92)

         at freemarker.core.Environment.visit(Environment.java:221)

         at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:179)

         at freemarker.core.Environment.visit(Environment.java:428)

         at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102)

         at freemarker.core.Environment.visit(Environment.java:221)

         at freemarker.core.MixedContent.accept(MixedContent.java:92)

         at freemarker.core.Environment.visit(Environment.java:221)

         at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:79)

         at freemarker.core.Environment.visit(Environment.java:221)

         at freemarker.core.MixedContent.accept(MixedContent.java:92)

         at freemarker.core.Environment.visit(Environment.java:221)

         at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:79)

         at freemarker.core.Environment.visit(Environment.java:221)

         at freemarker.core.MixedContent.accept(MixedContent.java:92)

         at freemarker.core.Environment.visit(Environment.java:221)

         at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:167)

         at freemarker.core.Environment.visit(Environment.java:428)

         at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102)

         at freemarker.core.Environment.visit(Environment.java:221)

         at freemarker.core.Environment$1.render(Environment.java:246)

         at com.eecart.template.directive.BaseDirective.setLocalVariable(BaseDirective.java:184)

         at com.eecart.template.directive.ArticleCategoryRootListDirective.execute(ArticleCategoryRootListDirective.java:51)

         at freemarker.core.Environment.visit(Environment.java:274)

         at freemarker.core.UnifiedCall.accept(UnifiedCall.java:126)

         at freemarker.core.Environment.visit(Environment.java:221)

解决方案:

 

不直接使用 articles

@Transient

   public List<Article> getMyArticles(){

      List<Article> list = new ArrayList<Article>(articles);

      return list;

   }

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM