下面是JSP页面代码
<c:forEach var="each" items="${typeProList}" begin="0" end="0">
<c:forEach var="product" items="${each.proList}" begin="0" end="1">
<div class="bot_right_pro_1">
<div class="pro_1_1"><a href="${pageContext.request.contextPath }/s/product.shtml?method=productinfo&proid=${product.id }"><img src="${pageContext.request.contextPath }<%=SConstants.CEM_UPLOAD_PRODUCT_PATH %>${product.picurl }" title="${product.name }" width="90" height="90"/></div>
<div class="pro_title"><a href="${pageContext.request.contextPath }/s/product.shtml?method=productinfo&proid=${product.id }" title="${product.name}"><strong><shopping:TagUtil type="string" begin="0" end="5" target="${product.name}"/></strong></a></div>
<div class="pro_title"><img src="${pageContext.request.contextPath}/images/huigou/icon_2.jpg" /><strong><span class="red">${product.hmprice }元</span></strong></div>
</div>
</c:forEach>
</c:forEach>
这是我根据以上写的ftl(freemarker 标签写的)
<#if typeProList?exists>
<#list typeProList[0..0] as each>
<#list each.proList[0..1] as product>
<div class="bot_right_pro_1">
<div class="pro_1_1"><a href="/huigou/s/product.shtml?method=productinfo&proid=${product.id }"><img src="/huigou<%=SConstants.CEM_UPLOAD_PRODUCT_PATH %>${product.picurl }" title="${product.name }" width="90" height="90"/></div>
<div class="pro_title"><a href="/huigou/s/product.shtml?method=productinfo&proid=${product.id }" title="${product.name}"><strong><shopping:TagUtil type="string" begin="0" end="5" target="${product.name}"/></strong></a></div>
<div class="pro_title"><img src="/huigou/images/huigou/icon_2.jpg" /><strong><span class="red">${product.hmprice }元</span></strong></div>
</div>
</#list>
</#list>
</#if>
但是报错:list each.proList[0..1] as product [on line 24, column 37 in probottom.ftl]
问题补充:蔡华江 写道
<#list each.proList[0..1] as product>
改为
<#list (each.proList)[0..1] as product>
试试
2010-01-21 11:10:37 [freemarker.runtime]-[ERROR]
on line 24, column 59 in probottom.ftl
Left side index of range out of bounds, is 0, but the sequence has only 0 element(s) (note that indices are 0 based, and ranges are inclusive).
The problematic instruction:
----------
==>
list (each.proList)[0..1] as product [on line 24, column 37 in probottom.ftl]
----------
Java backtrace for programmers:
----------
freemarker.template.TemplateException: on line 24, column 59 in probottom.ftl
Left side index of range out of bounds, is 0, but the sequence has only 0 element(s) (note that indices are 0 based, and ranges are inclusive).
相关推荐
SpringBoot_Freemarker生成Word_多个表格+两层嵌套循环; 步骤说明: 1.用Microsoft Office Word打开word原件;将文档中需要动态生成的内容,替换为属性名 ${name} 2.另存为,选择保存类型Word 2003 XML 文档(*....
本篇文章将深入讲解FreeMarker的指令学习,包括其基本概念、主要指令以及实际应用。 一、FreeMarker的基本概念 1. 模板:FreeMarker的工作核心是模板,模板是一份HTML或XML文件,其中包含静态文本和FreeMarker...
@RequestMapping(/freemarker) @Controller public class FreemarkerController { //测试1 @RequestMapping(/test1) public String test1(Model model){ //向数据模型放数据 model.addAttribute(name,三年二班)...
- **循环结构**:`<#list>` 可以遍历集合或数组,实现循环输出。 - **注释**:`<!--...-->` 用于在模板中添加注释,不会出现在生成的输出中。 - **控制流指令**:如 `<#assign>` 分配变量,`<#escape>` 进行字符...
2. **更强大的模板控制**:FreeMarker的宏功能更为强大,允许局部变量、递归宏调用、缺省参数和嵌套体内容。同时,宏可以作为变量或参数传递,增加了模板的灵活性。 3. **命名空间**:命名空间支持多个变量命名空间...
3. **指令(Directives)**:Freemarker提供了一系列指令,如`<#include>`用于包含其他模板,`<#macro>`定义可重用的代码块,`<#nested>`用于处理嵌套模板。 4. **内置函数**:Freemarker内建了一些方便的函数,如`...
- **常用指令**: 包括但不限于`include`、`if/elseif/else`、循环结构等。 - **变量管理**: 在模板中可以创建和修改变量。 - **复杂表达式**: 可以在几乎任何地方使用复杂的表达式来指定值。 - **宏定义**: 支持...
在实际开发中,你可能还需要处理更复杂的情况,比如嵌套的循环和条件语句,以及对 Word 特有的格式化和样式的支持。Apache POI 提供了对 Word 格式控制的接口,可以结合 FreeMarker 使用,以实现更精细的文档格式...
此外,FreeMarker支持嵌套的对象和递归的数据结构。 1.4 模板一览 模板文件通常使用`.ftl`扩展名,其中包含HTML代码和其他FreeMarker指令。FreeMarker提供了多种控制结构,如条件语句(`<#if>`, `<#else>`)、循环(`...
在Java应用中,使用FreeMarker导出Word文档时,经常会遇到列表(list)的嵌套问题,这涉及到数据模型构建、模板设计以及Word文档的格式化。下面我们将详细探讨这个主题。 1. **FreeMarker简介** FreeMarker是一个...
在Java应用中,使用FreeMarker导出Word文档可以提供灵活的文本和数据结合的方式,尤其适用于生成报告、合同等复杂格式的文档。本篇将详细介绍如何使用FreeMarker与Java结合来导出包含多张图片的Word文档。 1. **...
- `foreach` 循环:`<#list items as item>`...`</#list>`。 - **函数和方法调用**:FreeMarker支持内置函数和自定义方法调用,如`length()`、`substring()`等。 - **逻辑运算符**:包括 `==`、`!=`、`、`>`、`、...
3. 控制结构:除了基本的条件语句和循环,Freemarker还有`<#nested>`用于嵌套模板,`<#tolog>`打印调试信息,以及`<#function>`定义自定义函数。 三、Freemarker进阶 1. 自定义指令:通过继承`...
9. **列表嵌套**:Freemarker支持多层列表的遍历,这对于展示复杂数据结构非常有用。 10. **自定义迭代器**:除了内置的`<#list>`,还可以自定义迭代器实现更复杂的逻辑。 在实际开发中,理解并熟练运用这些知识点...
2. **控制结构**:包括条件语句(`<#if>`, `<#else>`, `<#elseif>`)和循环(`<#list>`,`<#foreach>`)。这些结构允许根据条件展示不同的内容或遍历数据集。 3. **指令**:如`<#include>`用于包含其他模板,`...
它们用于控制模板的逻辑,例如循环(`#list`)、条件判断(`#if`,`#else`等)、包含其他模板(`#include`)等。指令可以是开始标签、结束标签或空标签形式,且需要正确嵌套,如同XML。 例如,以下是一个简单的...
- `#foreach`:循环遍历集合,常见的用法是遍历数组或列表。 - `#set`:设置变量,可以在模板内部定义临时变量。 - `#include`:包含其他模板文件,实现模板的复用。 2. **模板指令** - `#assign`:类似于`#set...