Freemarker分页宏
<#macro page pagination countlist url>
<#if pagination.totalPage gt 1>
<div class="pages" style="margin: 0px auto;">
<#if pagination.pageNo==1>
<span class="front" style = "background-color:yellow;">上一页</span>
<#else>
<a href = "${url}pageNo=${pagination.pageNo-1}">上一页</a>
</#if>
<#list countlist as countlist>
<#if pagination.pageNo== countlist>
<span class="current" style = "background-color:red;">${countlist}</span>
<#else>
<a href = "${url}pageNo=${countlist}">${countlist}</a>
</#if>
</#list>
<#if pagination.pageNo == pagination.totalPage >
<span class="front" style = "background-color:red;">下一页</span>
<#else>
<a href = "${url}pageNo=${pagination.pageNo+1}">下一页</a>
</#if>
当前页:${pagination.pageNo}
总页数:${pagination.totalPage}
总大小:${pagination.totalCount}
</div>
<#else>
</#if>
</#macro>
如果在Freemarker定义了ftl文件自动载入的话,就不需要引入文件了。如果没需要在html里面导入
<#include "/WEB-INF/ftl_lib/page.ftl">
而如果要使用分页的时候调用超级简单:
<@page pagination=pagination countlist= countlist
url = "/huisou/admin/picturecategory/member_toList.action"/>
所有需要分页的地方只需要传递一个参数就可以用分页宏,避免了页面代码臃肿,这也做到了代码重用
2: Freemarker页面标签总结
页面自定义数组 ls 为数组名称,可以单引号或者双引号
<#assign ls = ['a', 'b'.....] ?sort >
判断list是否存在:<#if list ? exists> </#if> 或<#if list ??> </#if>
遍历List: <#list list as i >${i.name}</#list>
Js字符转义 <script> alert("${err ? js_string}"); </script>
${i_index} 从0计数-- ${i_index+1}
比较复杂的list 涉及到每几个就换行
第一种实现
<#list list as a>
${list.content}
<#if (a_index+1)%3=0>
<br/>
<#else>
</#if>
</#list>
第二种(推荐Sequence内置的分段器: chunk)
<#list list?chunk(3) as row>
<div>*
<#list row as cell>
${cell.content}
</#list>
</div>
</#list>
注意:
<#assign seq = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']>
<#list seq?chunk(4) as row>
<ul> <li>
<#list row as cell>${cell_index+1}${cell}</#list>
</li></ul>
</#list>
==============
<#list seq?chunk(4, '<span style = "background-color:red;">暂时没有数据</span>') as row>
<ul> <li>
<#list row as cell>${cell_index+1}${cell}</#list>
</li></ul>
</#list>
注意第一种的index索引和list的数量一致,而下面一种和ul的数量 * chunk数一致
最后一个ul数据不够了,但是它的li个数和chunk数 是一样的
<!--what is freemarker?-->
<script src="/system_res/js/sysoption.js" type="text/javascript"></script>
<#list list as a>
<tr>
<@s.form method="post" action="sysoption_edit.action" onsubmit="return checkform(this);">
<td align="left">
<input type = "hidden" id = "id" name = "sys.id" value = "${a.id}"/>${a.id}
</td>
<td align="left">
<input type = "hidden" name = "sys.name" value = "${a.name}"/>${a.name}
</td>
<td>
<#if a.setvalue ? length gt 30>
<input type = "text" style = "width:296px;" name = "myidvalue" value = "${a.setvalue[0..30]}" readOnly=true ondblclick="this.readOnly=false;this.value=token.value;" title = "${a.setvalue}"/>
<#else>
<input type = "text" style = "width:296px;" name = "myidvalue" value = "${a.setvalue}" readOnly=true ondblclick="this.readOnly=false;"/>
</#if>
<input type = "hidden" name = "token" value = "${a.setvalue}"/>
</td>
<td><input type = "submit"/></td>
</@s.form>
</tr>
</#list>
<!--以下是测试数据,优先实现,如果要控制显示的顺序从HTML管理-->
<#--<#include "/WEB-INF/ftl_lib/token_list.ftl">
<@list items=["e.huisou.com", "huisou.com", "dev.huisou.com"]/>
<@tokenmath.test foo = "myfor" bar = "mybar" baaz = 25*10-100/> 变量的赋值可以是任意正则表达式
-->
<!--test1-->
<#--<#assign user = "Joe Hider">${user}声明变量,并显示-->
<!--test2-->
<#--
<#import "/WEB-INF/ftl_lib/token_copyright.ftl" as my>
<#assign mail="myother@myother.com">
<@my.copyright date="1999-2002"/> 第一个调用
${my.mail}<br/> 全局变量
${mail} 局部变量,虽然名称都是mail但是Freemarker能区别出来
-->
<!--test3--><#--
<#import "/WEB-INF/ftl_lib/token_copyright.ftl" as my>
${my.mail}<br/>
<#assign mail="update hello micro@update test .com" in my>隐藏全局变量(克隆一份),而不是覆盖, in my只的是token_copyright.ftl文件,mail变量指向克隆过的变量
${my.mail}
-->
<#--
<#list ["loop 1"] as x> ${x}
<#list ["loop 2"] as x> ${x}
<#list ["loop 3"] as x>
${x}
</#list>
${x}
</#list>
${x}
</#list> 内部循环变量隐藏同名的外部循环变量
-->
<#--
<#assign answer=42/>
${answer?string.currency}
${answer?string.percent}
-->
<!--以下是测试数据,优先实现,如果要控制显示的顺序从HTML管理-->
<#--
<#include "/WEB-INF/ftl_lib/token_list.ftl">
<@list items=["e.huisou.com", "huisou.com", "dev.huisou.com"]/>
<@tokenmath.test foo = "myfor" bar = "mybar" baaz = 25*10-100/> 变量的赋值可以是任意正则表
达式
-->
<!--test1-->
<#--<#assign user = "Joe Hider">${user}声明变量,并显示-->
<!--test2-->
<#--
<#import "/WEB-INF/ftl_lib/token_copyright.ftl" as my>
<#assign mail="myother@myother.com">
<@my.copyright date="1999-2002"/> 第一个调用
${my.mail}<br/> 全局变量
${mail} 局部变量,虽然名称都是mail但是Freemarker能区别出来
-->
<!--test3-->
<#--
<#import "/WEB-INF/ftl_lib/token_copyright.ftl" as my>
${my.mail}<br/>
<#assign mail="update hello micro@update test .com" in my>隐藏全局变量(克隆一份),而不是覆盖
, in my只的是token_copyright.ftl文件,mail变量指向克隆过的变量
${my.mail}
-->
<#--
<#list ["loop 1"] as x> ${x}
<#list ["loop 2"] as x> ${x}
<#list ["loop 3"] as x>
${x}
</#list>
${x}
</#list>
${x}
</#list> 内部循环变量隐藏同名的外部循环变量
-->
<#--
<#assign answer=42/>
${answer?string.currency}
${answer?string.percent}
-->
分享到:
相关推荐
**注意**:为了让Freemarker能识别并使用Struts2提供的标签,需要在`web.xml`中配置相应的过滤器。 - **Struts.xml配置**:定义不同业务场景的结果视图。 ```xml <result name="success" type="freemarker">/...
总结起来,FreeMarker自定义分页标签宏的实现涉及到前端模板的宏定义与调用,以及后端的数据处理和链接生成。通过这种方式,我们可以创建出灵活且可复用的分页组件,方便地应用于各种项目中。理解并熟练掌握宏的使用...
总结一下,Struts2、Spring和Freemarker的组合为Java Web开发提供了强大的工具集,涵盖了MVC模式的各个方面。它们的自定义标签功能则进一步增强了框架的灵活性,使得开发者可以按照项目需求定制解决方案。在实际工作...
FreeMarker会忽略FTL标签内的空白字符,且`, `/`和指令之间不允许有空格。 ### 插值规则: Freemarker的插值有两种类型: 1. 通用插值 `${expr}`:根据表达式的结果类型转换为相应的输出。 - 字符串值:直接输出...
Freemarker语法总结 Freemarker是一种基于模板的模板引擎,主要用来生成静态 HTML 页面。FreeMarker 模板文件由四个部分组成:文本、注释、插值和 FTL 指令。 一、文本 文本是 Freemarker 模板文件的直接输出部分...
### Freemarker 使用总结与详解 #### 一、Freemarker 概述 Freemarker 是一种用于生成动态页面的模板引擎。它不依赖任何 Web 容器,可以在任何 Java 应用程序中使用。Freemarker 的核心优势在于其简单易学且功能...
本文将对JSTL中常用的标签进行总结。 首先,标签主要用于输出数据内容。在JSP中,它用于显示变量值、请求参数等信息。比如,如果我们想输出一个名为"name"的参数值,我们可以使用如下代码:${param.name}" default=...
Freemarker还支持宏、函数、自定义标签库等功能,可以极大地增强模板的灵活性和可复用性。 在实际应用中,控制器层会将模型数据传递给视图,如下所示: ```java @GetMapping("/users") public String getUsers...
本篇文章将对Freemarker自定义标签进行深入的总结。 1. **自定义标签基础** 自定义标签在Freemarker中被称为`Custom Tags`,它们通过`<@...>`语法来调用。这些标签通常是由Java代码实现的,它们可以处理复杂的逻辑...
Freemarker的核心功能是将数据模型与表现层分离,使得开发者能够更专注于业务逻辑,而设计者则专注于页面布局。 #### 二、问题背景 假设我们有一个列表,需要将其按照一行两列的方式进行排列,即每两列一个单元格...
4. **自定义函数和标签**:Freemarker支持自定义函数(`TemplateMethodModelEx`)和标签库(`TemplateDirectiveModel`),你可以扩展Freemarker的功能,使其更符合项目需求。 三、模板语法 Freemarker的模板语法...
总结来说,Freemarker的分页功能实现了在Web应用中高效展示大量数据的需求,通过合理设计后端逻辑和前端模板,可以提供既美观又实用的用户界面。同时,关注性能和安全性的细节,将有助于构建更加健壮的Web应用程序。
- `class`:`<a/>`标签的类名。 #### 2. 分页逻辑 宏`genPagination`的内部逻辑涉及以下关键步骤: - **计算显示范围**:通过`halfPage`变量计算出显示页码的中心位置,从而决定显示哪些页码。如果当前页小于等于...
JAVA模版引擎Freemarker常用标签(一) 1. if指令 这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下: <#if condition>... <#elseif condition>... <#elseif condition>......
总结来说,这个"freemarker-2.3.23.zip"包提供了一个Java环境下的FreeMarker库,可以结合Apache POI来实现对Word文档的动态操作,如替换和插入文字、图片及表格。通过这种方式,开发者可以自动化处理大量Word文档,...
这样的设计允许设计师专注于页面布局和样式,而程序员则关注数据的获取和处理。 #### 六、总结 FreeMarker是一个强大而灵活的模板引擎,它提供了丰富的功能和简便的使用方式,适用于广泛的场景,无论是Web开发还是...
**FreeMarker**是一种强大的、基于Java的模板引擎,主要用于动态生成HTML页面,但也支持其他类型的文本格式(如XML、JavaScript、电子邮件等)。它通过将数据模型与表现层分离的方式,使得Web应用程序更加模块化且...
通过将Struts2的模型数据传递给FreeMarker模板,前端开发人员可以使用FreeMarker提供的丰富的模板标签和函数来渲染页面。 #### 配置Struts2与FreeMarker 在Struts2中使用FreeMarker之前,首先需要进行相应的配置。...
Freemarker提供了丰富的标签库,用于控制逻辑和数据处理。其中一些常用标签包括: - `#foreach`:循环遍历集合或数组。 - `#if`:条件判断。 - `#set`:变量赋值。 - `#list`:处理列表。 - `#include`:包含其他...