转摘: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;

}

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

  1. 【问题记录】使用FreeMarker生成数据,模板明明没错却一直报错“The following has evaluated to null or missing:”

    今天使用FreeMarker生成数据时一直报错,错误信息是“The following has evaluated to null or missing:”,告知我找不到值. 但是我再三确认,这些属性 ...

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

    //            删除对应数据 //            for (OrderModel *order in self.OrderList) { // //                ...

  3. 集合比较器报错java.lang.IllegalArgumentException: Comparison method violates its general contract!

    Collections.sort(listMonthlyUsage, new Comparator<MonthlyUsageDto>() { //按照元素从小到大排序 @Override ...

  4. JS数组遍历方法集合

    就让我们在逆战中成长吧,加油武汉,加油自己 1.for循环 使用零时变量将长度存起来,当数组较大时优化效果才会比较明显. var ar1=[2,4,6,8] for(var i=0;i<ar1. ...

  5. 遍历List集合,删除符合条件的元素

    List集合的遍历有三种方式:增强for循环,普通for循环,Iterator迭代器遍历 如果只是对集合进行遍历,以上三种循环都可正常遍历: (1)增强For循环遍历List集合 List<St ...

  6. 用<forEach>遍历list集合时,提示我找不到对象的属性

    <c:forEach items="${list}" var="item"> <tr> <td>${item.UserId} ...

  7. DOM操作中,遍历动态集合的注意事项。ex: elem.children

    elem.childNodes和elem.children返回的都是动态集合. 动态集合(live collection): 不实际存储元素和属性值 每次访问集合都重新查找DOM树 遍历动态集合:   ...

  8. 遍历Map集合:java.util.Map.Entry、KeySet两种方式

    遍历Map集合的两种方式: 1.用KeySet Map.keySet(),返回一个存放所有key的set集合,通过遍历集合,根据key值取出所有的value值. Map<String,Strin ...

  9. 键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key, 用个数作为value,放入到map集合中,遍历map集合

    package cn.it.zuoye5; import java.io.File;import java.util.HashMap;import java.util.Iterator;import ...

随机推荐

  1. [ruby on rails] 跟我学之(5)显示所有数据

    之前的index页,显示的是hello world,现在将其修改为显示我们在rails console里面录入的数据. 1. 修改action 如之前的章节<[ruby on rails] 跟我 ...

  2. 浅析django的abstract,proxy, managed

    django.db.models.Model 的 Meta参数 参数 类型 说明 继承 abstract boolean 是否建表 不继承,子类自动充值为默认值(False) managed bool ...

  3. MyBatis调用存储过程

    MySQL存储过程 DROP PROCEDURE IF EXISTS transferMoney; -- 实现转账功能的存储过程 CREATE PROCEDURE transferMoney ( IN ...

  4. Django 的css和js压缩插件:django_compressor

    今天尝试了django_conpressor,一个在django框架中压缩css和js的插件,灰常有用 我把它加载在我的base的HTML template中,原来未经压缩的css和js是: < ...

  5. JAVA 中BIO,NIO,AIO的理解

    [转自]http://qindongliang.iteye.com/blog/2018539 ?????????????????????在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解 ...

  6. Junit4测试

    1.junit初级入门 2.常用注解 3.运行流程 4.测试套件使用 5.参数化设置

  7. apache AllowEncodedSlashes 允许URL中对路径分隔符进行编码

    2013年11月29日 10:35:32 情景: 你想通过在当前的URL中记录来源页面的URL,以便处理完请求后再跳转回来源页: http://www.example1.com/refer/http: ...

  8. border-box

      box-sizing属性可以为三个值之一:content-box(default),border-box,padding-box. content-box,border和padding不计算入wi ...

  9. kail ip配置

    设置ip /etc/network/interfaces # This file describes the network interfaces available on your system # ...

  10. 【Ubuntu14.04.1】设置开机可以Root用户身份登录

    $ sudo gedit /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf [SeatDefaults]user-session=ubuntugreet ...