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;

}

QQ群: 专注JavaWeb开发官方总群(178744906) 验证消息:JavaWeb1024

时间: 2024-11-07 04:17:24

freemarker 直接使用List来遍历set集合,可能会报错的相关文章

使用FreeMarker生成数据,模板明明没错却一直报错“The following has evaluated to null or missing:”

今天使用FreeMarker生成数据时一直报错,错误信息是"The following has evaluated to null or missing:",告知我找不到值. 但是我再三确认,这些属性的值都是正常的,也就是说某些原因造成FreeMarker无法读取到这些值.困扰了我将近两个小时后,经过各种尝试后,终于被我发现了原因: FreeMarker读取数据的时候不支持属性名首字母大写(但是支持变量名全大写的属性)!将变量名全部改为小写后,数据就正常生成了. 因为我也只是个初学者(

ios开发解决遍历删除数组对象报错

//            删除对应数据 //            for (OrderModel *order in self.OrderList) { // //                NSLog(@"%ld----%ld",order.tagBut,(long)btn.tag); // //                if (order.tagBut==btn.tag) { // ////                    [self.OrderList rem

JS数组遍历方法集合

就让我们在逆战中成长吧,加油武汉,加油自己 1.for循环 使用零时变量将长度存起来,当数组较大时优化效果才会比较明显. var ar1=[2,4,6,8] for(var i=0;i<ar1.length;i++){ console.log(i) console.log(ar1[i]) } 2.foreach循环 遍历数组中每个数,没有返回值 使用break不能中断循环,使用return也不能返回到外层函数 var ar1=[2,4,6,8] ar1.foreach((item,index,a

Java遍历Map集合方法

package testMap; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; /**  * 循环遍历Map集合  *   * @author Administrator  *   */ pub

遍历Map集合的几种方式

1 import java.util.HashMap; 2 import java.util.Iterator; 3 import java.util.Map; 4 import java.util.Map.Entry; 5 6 /** 7 * <p>遍历Map集合</p> 8 * @author:[email protected] 9 * @date:2017-5-30 10 */ 11 public class Test { 12 public static void main

遍历Collection集合中的6种方法:

下面的代码演示了遍历Collection集合的6种方法,注意Collection集合的遍历远不止于增强for循环,和迭代器两种. 代码如下: 1 package com.qls.traverse; 2 3 import java.util.ArrayList; 4 import java.util.Arrays; 5 import java.util.Collections; 6 import java.util.Enumeration; 7 import java.util.Iterator;

25.使用Iterator和增强型for循环遍历Map集合

/** * 宠物类,狗狗和企鹅的父类. */ public abstract class Pet { protected String name = "无名氏";// 昵称 protected int health = 100;// 健康值 protected int love = 0;// 亲密度 public abstract void eat(); //抽象方法eat(),负责宠物吃饭功能. /** * 无参构造方法. */ public Pet() { } /** * 有参构造

集合框架(集合的遍历之集合转数组遍历)

Collection接口成员方法 Object[] toArray() 把集合转成数组,可以实现集合的遍历 Iterator iterator() 迭代器,集合的专用遍历方式  package cn.itcast_01; import java.util.ArrayList; import java.util.Collection; /*  * 集合的遍历.其实就是依次获取集合中的每一个元素.  *   * Object[] toArray():把集合转成数组,可以实现集合的遍历  */ pub

用&lt;forEach&gt;遍历list集合时,提示我找不到对象的属性

<c:forEach items="${list}" var="item"> <tr> <td>${item.UserId}</td> <td>${item.UserName}</td> </tr> </c:forEach> 用<forEach>遍历list集合时,提示我找不到对象的属性.因为他封装的时候 他会主动将第一位改成大写 如果你的是 name 封装好