freemarker sequence 问题

问题描述

数据库中存放[{"image":"5674e621e57a477eafacc38ae2b33123.jpg","smallImage":"small-5674e621e57a477eafacc38ae2b33123.jpg","bigImage":"big-5674e621e57a477eafacc38ae2b33123.jpg","fullImage":"full-5674e621e57a477eafacc38ae2b33123.jpg"},{"image":"b2d914623be94cbca0c686ab2c4c1066.jpg","smallImage":"small-b2d914623be94cbca0c686ab2c4c1066.jpg","bigImage":"big-b2d914623be94cbca0c686ab2c4c1066.jpg","fullImage":"full-b2d914623be94cbca0c686ab2c4c1066.jpg"},{"image":"48a1c02d80dd49cab1fcacbe888a6fc6.jpg","smallImage":"small-48a1c02d80dd49cab1fcacbe888a6fc6.jpg","bigImage":"big-48a1c02d80dd49cab1fcacbe888a6fc6.jpg","fullImage":"full-48a1c02d80dd49cab1fcacbe888a6fc6.jpg"},{"image":"41c25d1a547b4e7583ed0a1798ea30c5.jpg","smallImage":"small-41c25d1a547b4e7583ed0a1798ea30c5.jpg","bigImage":"big-41c25d1a547b4e7583ed0a1798ea30c5.jpg","fullImage":"full-41c25d1a547b4e7583ed0a1798ea30c5.jpg"},{"image":"f41da2318e02464386797f7893bf48ec.jpg","smallImage":"small-f41da2318e02464386797f7893bf48ec.jpg","bigImage":"big-f41da2318e02464386797f7893bf48ec.jpg","fullImage":"full-f41da2318e02464386797f7893bf48ec.jpg"}]直接 <#assign images=数据库值 >然后 <#list images as image>image.image</#list>正确。而自己写了个macro 传入比如:<#macro images> <#list images as image>image.image</#list> </#macro>就不争取了,报错信息为:Expected collection or sequence. images evaluated instead to freemarker.template.SimpleScalar on line 509, column 11 in WEB-INF/macros/front/front.ftl. 问题补充:myali88 写道

解决方案

<#assign imgs = json?eval><#list imgs as image>${image.image}</#list><br/><#macro showProductImage images> <#list images as image>${image.image}</#list><br/></#macro> <@showProductImage images = imgs />终于找到问题了,上面的“json”我是从服务器端返回的,直接赋值时,“imgs”还是字符串,所以要加上“?eval”,这样就把imgs转成了list,后面遍历就没问题了。你试试。
解决方案二:
引用兄弟 是写错了,你要是知道你改下测试下,别总挑我的毛病啊,javaeye又不能修改。老兄,不是挑毛病,是怕因为你书写错误导致了错误,提醒你一下。我给的例子,你试过没,可以吧?
解决方案三:
<#assign images = [{"image":"5674e621e57a477eafacc38ae2b33123.jpg","smallImage":"small-5674e621e57a477eafacc38ae2b33123.jpg","bigImage":"big-5674e621e57a477eafacc38ae2b33123.jpg","fullImage":"full-5674e621e57a477eafacc38ae2b33123.jpg"}, {"image":"b2d914623be94cbca0c686ab2c4c1066.jpg","smallImage":"small-b2d914623be94cbca0c686ab2c4c1066.jpg","bigImage":"big-b2d914623be94cbca0c686ab2c4c1066.jpg","fullImage":"full-b2d914623be94cbca0c686ab2c4c1066.jpg"}, {"image":"48a1c02d80dd49cab1fcacbe888a6fc6.jpg","smallImage":"small-48a1c02d80dd49cab1fcacbe888a6fc6.jpg","bigImage":"big-48a1c02d80dd49cab1fcacbe888a6fc6.jpg","fullImage":"full-48a1c02d80dd49cab1fcacbe888a6fc6.jpg"}, {"image":"41c25d1a547b4e7583ed0a1798ea30c5.jpg","smallImage":"small-41c25d1a547b4e7583ed0a1798ea30c5.jpg","bigImage":"big-41c25d1a547b4e7583ed0a1798ea30c5.jpg","fullImage":"full-41c25d1a547b4e7583ed0a1798ea30c5.jpg"}, {"image":"f41da2318e02464386797f7893bf48ec.jpg","smallImage":"small-f41da2318e02464386797f7893bf48ec.jpg","bigImage":"big-f41da2318e02464386797f7893bf48ec.jpg","fullImage":"full-f41da2318e02464386797f7893bf48ec.jpg"} ]><#macro showProductImage images> <#list images as image>${image.image}</#list><br/></#macro><@showProductImage images = images /> 这样我测试过没问题。引用<#macro showProductImage imgas> <#list images as image>image.image</#list> </#macro>你这里的“imgas”和“images”写错了吧,对不上啊!
解决方案四:
<#macro images> <#list images as image>image.image</#list> </#macro>宏定义里面第一个是宏的名字,后面才是参数。你上面的定义根本就没有为宏定义参数。而你调用时取有传入参数: <@images images="${images}" /> 这不是有问题吗?
解决方案五:
定义就报错了?还是调用?你把images作为参数出入宏试试,是不是宏定义内,无法访问#assign定义的变量?

时间: 2024-11-08 20:17:10

freemarker sequence 问题的相关文章

Freemarker教程

以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:<#-- ... -->格式部分,不会输出 3,插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出 4,FTL指令:FreeMarker指定,和HTML标记类似,名字前加#予以区分,不会输出 下面是一个FreeMarker模板的例子,包含了以上所说的4个部分 < html><br

Freemarker标签使用

A 概念 最常用的 3 个概念  sequence 序列,对应java 里的list .数组等非键值对的集合  hash      键值对的集合  namespace 对一个ftl 文件的引用, 利用这个名字可以访问到该ftl 文件的资源  B 指令  if, else, elseif  语法  Java代码  <#if condition>     ...   <#elseif condition2>     ...   <#elseif condition3>   

FreeMarker标签与使用

模板技术在现代的软件开发中有着重要的地位,而目前最流行的两种模板技术恐怕要算freemarker和velocity了,webwork2.2对两者都有不错的支持,也就是说在webwork2中你可以随意选择使用freemarker或velocity作为view,模板技术作为view的好处是很多,尤其和jsp比较起来优点更大,众所周知jsp需要在第一次被执行的时候编译成servlet,那么这个过程是很慢的,当然很多应用服务器都提供预编译的功能,但是在开发的时候仍然给我们程序员带来了很多痛苦,每次修改都

Freemarker中遍历List以及内置函数使用

=  在Freemarker应用中经常会遍历List获取需要的数据,并对需要的数据进行排序加工后呈现给用户.   那么在Freemarker中如何遍历List,并对List中数据进行适当的排序呢?一. Freemarker中list指令简单介绍 要想在Freemarker中遍历list,必须通过使用list指令,即<#list sequence as item>-</#list> sequence是集合(collection)的表达式,item是循环变量的名字,不能是表达式. 当在

FreeMarker语法指南

  FreeMarker概述 l         FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 l         FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 l         虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据(如下图) l         FreeMarker不是一个Web应用框架,而适合作为Web应

Freemarker中如何遍历List

 Freemarker中如何遍历List(附源码) 关键词(Keyword):Freemarker,Freemarker遍历list 在Freemarker应用中经常会遍历List获取需要的数据,并对需要的数据进行排序加工后呈现给用户.那么在Freemarker中如何遍历List,并对List中数据进行适当的排序呢? 通过下文的介绍,相信您一定会找到答案. 一.  Freemarker中list指令简单介绍 要想在Freemarker中遍历list,必须通过使用list指令,即<#list

FreeMarker基础语法教程

根据网上自己做了测试和一点修改,测试代码还有测试的截图在最下面的部分贴出来了,方便大家参考和学习!不过文章中的关于测试的代码没有作修改,可以直接参考我的!!今天下载了一份freemarker的文档,才发现昨天参考的那篇资料恰恰就是文档,呼呼....啥也不说了!仔细的看了一遍文档,又做了一些实验,代码补充到上来!! 常用语法一个对象User(就是javabean对象)1.输出 ${User.name} 空值判断:${User.name?if_exists }, ${User.name?defaul

[freemarker]使用freemarker生成父子关系树抛异常

问题描述 需要生成一个菜单树,使用了freemarker,由于采用了tiles2,在和freemarker整合的时候出现了问题,所以直接使用freemarker 2.3.15将模板通过template.process方法产生html code显示到前端,主要代码如下://产生freemarker configpackage project.util.freemarker;import freemarker.cache.ClassTemplateLoader;import freemarker.t

hdu 2454 Degree Sequence of Graph G

点击打开链接 Degree Sequence of Graph G Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1997    Accepted Submission(s): 850 Problem Description Wang Haiyang is a strong and optimistic Chinese youngst