freemarkerはリストを直接使用してsetセットを巡回します.エラーが発生する可能性があります.

4304 ワード

抜粋:http://www.javaweb1024.com/java/JavaWebzhongji/2015/04/08/528.html
freemarkerはリストを直接使用してsetセットを巡回し、エラーを報告する可能性があります!エラーは次のとおりです.
Javaコード
private Set
articles = new HashSet
();
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