`

FreeMarker学习

阅读更多

关于FreeMarker 的基础学习请参考文档。。这里主要记录 FreeMarker 的一些问题。。

1.FreeMarker  乱码问题

     在struts2 中s:component默认是使用freemarker模板方式处理

     IDE是MyEclipse6.5,使用的是默认的GBK编码:可以在这里查看:Window->Preferences->Workspace->Text file encoding

    struts2的配置文件中是这么配置编码的:<constant name="struts.i18n.encoding" value="utf-8" /> 

    使用s:component时,模板页内容有中文时会乱码,在网上查了一通,自已又尝试了多种方式,一直无法解决乱码问题,郁闷了很长一段时间。无意间发现,修改ftl文件的编码即可很容易解决乱码问题:选择ftl文件->右键->Properties->Text file encoding,改为utf-8。

 

2、FreeMarker 和Struts2 的整合

 

在FreeMarker模板中使用标签毕竟不同于在JSP页面中使用标签,因为FreeMarker不支持使用taglib指令来导入标签库.但Struts2为了在FreeMarker模板中使用标签库提供了额外的支持.可以按照下面的步骤进行:
1,将系统所需要的标签库定义文件(.tld文件)复制到WEB-INF目录下,对于Struts2,则是复制struts2-core-2.0.11.2.jar中的META-INF\struts-tags.tld文件
2,在web.xml文件中启动JspSupportServlet.为了启动它,则应该在web.xml文件中增加如下配置片段:
<!-- 定义一个JspSupportServlet -->
<servlet>
   <servlet-name>JspSupportServlet</servlet-name>
   <servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>
   <!-- 配置JspSupportServlet优先启动 -->
   <load-on-startup>1</load-on-startup>
</servlet>
3,在FreeMarker模板中使用assign指令导入标签库,导入标签库的代码如下:
<#-- 定义/WEB-INF/struts-tags.tld文件对应的标签库前缀为s -->
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] />

 

 

Struts2解析FreeMarker模板中变量的顺序如下:

1,FreeMarker模板内建的变量;
2,ValueStack中的变量;
3,ActionContext中的变量;
4,HttpServletRequest中的属性;
5,HttpSession中的属性;
6,ServletContext范围的属性.

FreeMarker模板的内建变量有如下几个:
1,stack:代表ValueStack本身,可通过如下方式来访问其中的变量"${stack.findString('ognl expr')}"
2,action:代表刚刚执行过的Action实例
3,response:代表HpptServletResponse实例
4,res:代表HpptServletResponse实例
5,request:代表HpptServletRequest实例
6,req:代表HpptServletRequest实例
7,session:代表HpptSession实例
8,application:代表ServletContext实例
9,base:代表用户请求的上下文路径.

FreeMarker中访问Servlet/JSP范围对象

Struts2还为在FreeMarker模板中访问Servlet/JSP范围对象提供了支持,通过这种支持可以直接访问这些变量.
访问application范围内的属性代码如下:
<#if Application.attributeName?exists>
${Application.attributeName}
</#if>
也可以通过使用Struts2标签来输出,代码如下:
<@s.property value="${#application.attributeName}" />

访问session范围内的属性如下:
<#if Session.attributeName?exists>
${Session.attributeName}
</#if>
或
<@s.property value="${#session.attributeName}" />

访问request范围内的属性如下:
<#if Request.attributeName?exists>
${Request.attributeName}
</#if>
或
<@s.property value="${#request.attributeName}" />

对于request,还可以访问request的请求参数,如下:
<#if Parameter.parameterName?exists>
${Parameter.parameterName}
</#if>
或
<@s.property value="${#parameter.parameterName}" />

访问ValueStack上下文参数,代码如下:
${stack.findValue('#myContextParam')}
或
<@s.property value="${#myContextParam}" />

 

 3、FreeMarker 的内建函数

chunk,  is_date,  last,  root,  j_string,  round,  contains,  is_hash,  long,  float,  ends_with,  namespace,  matches,  time,  values,  seq_last_index_of,  uncap_first,  byte,  substring,  is_transform,  web_safe,  groups,  seq_contains,  is_macro,  index_of,  word_list,  int,  is_method,  eval,  parent,  xml,  number,  capitalize,  if_exists,  rtf,  node_type,  double,  is_directive,  url,  size,  default,  floor,  ceiling, is_boolean,  split,  node_name,  is_enumerable,  seq_index_of,  is_sequence,  sort,  is_node, 
sort_by,  left_pad,  cap_first,  interpret,  children,  node_namespace,  chop_linebreak, date,  short,  last_index_of,  is_collection,  ancestors,  length,  trim,  datetime, is_string,  reverse,  c,  keys,  upper_case,  js_string,  has_content,  right_pad,  replace,  is_hash_ex,  new,  is_number,  lower_case,  is_indexable,  string,  exists,  html,  first

 

具体的用途,以后有空再总结,最近用到的有

一般写法是这个样子的

<#list dataEntity as de>

<a href="${de.url}">${de.name}</a>

</#list>


要是排序,则用

<#list dataEntity?sort as de>

<a href="${de.url}">${de.name}</a>

</#list>

这是按元素的首字母排序。若要按list中对象元素的某一属性排序的话,则用

<#list dataEntity?sort_by([“name”]) as de>

<a href="${de.url}">${de.name}</a>

</#list>

这个是按list中对象元素的[name]属性排序的,是升序,而我们大多情况要用到降排序,这时得改成如下的样子:

<#list dataEntity?sort_by([“name”])?reverse as de>

<a href="${de.url}">${de.name}</a>

</#list>

 

分享到:
评论

相关推荐

    freemarker学习资料汇总

    本压缩包集合了丰富的Freemarker学习资源,涵盖从基础到进阶的各种知识点,以下是这些文档中可能包含的详细内容: 1. **Freemarker中文手册.pdf**: 这份手册通常会详细介绍Freemarker的基本概念,如模板语言、...

    FreeMarker学习资料

    ### FreeMarker 学习资料详解 #### 一、FreeMarker 模板文件构成 FreeMarker 是一种用于生成动态文档的工具,它通过结合固定的文本、注释、变量(插值)以及指令(FTL标签)来创建动态内容。具体而言,FreeMarker ...

    freemarker学习

    Freemarker的核心思想是将数据模型与模板结合,通过模板来呈现准备好的数据。 在开始使用Freemarker之前,你需要先下载相关的jar包。你可以访问FreeMarker的官方网站...

    freemarker 学习

    综上,FreeMarker学习的内容广泛且深入,涵盖了模板语言的使用、配置、源码解析、最佳实践等多个方面。通过学习FreeMarker,开发者可以更好地控制和生成动态内容,提高代码的可读性和可维护性。

    freemarker学习例子

    这个“freemarker学习例子”应该包含了一些基础到进阶的Freemarker用法,帮助初学者快速上手。 在Freemarker中,主要涉及以下几个核心概念: 1. **模板(Templates)**:模板是Freemarker的核心,它是HTML或其他文本...

    freemarker学习资料

    在快速入门中,我们看到FreeMarker的基本工作原理是通过模板中的特定指令,如`${...}`,将动态数据插入到静态模板中。例如,以下模板展示了如何欢迎用户并显示最新产品的信息: ```html &lt;title&gt;Welcome! &lt;h1&gt;...

    Freemarker 学习笔记一 【乱码解决】

    这篇“Freemarker学习笔记一【乱码解决】”将指导我们如何解决这个问题。 首先,我们需要了解乱码的常见原因。在Java Web开发中,乱码通常与以下因素有关: 1. **文件编码**:Freemarker模板文件(.ftl)的编码...

    Freemarker学习笔记

    Freemarker学习笔记可以帮助初学者了解,快速掌握Freemarker

    FreeMarker 学习手册

    FreeMarker 学习手册 详细介绍FreeMarker模板技术的手册

    FreeMarker学习笔记

    ### FreeMarker 学习笔记知识点总结 #### 一、FreeMarker 概览 FreeMarker 是一个用 Java 编写的模板引擎,它可以帮助开发者快速生成 HTML 页面或其他格式的文档。其核心概念包括模板、数据模型以及如何将两者结合...

    FreeMarker学习资料整理

    下面,我们将深入探讨FreeMarker的基础知识、应用场景以及如何进行学习。 1. **基础概念** - **模板**:FreeMarker的核心是模板,它是由开发者编写的HTML或XML文件,其中嵌入了特定的FreeMarker语法,用于动态生成...

    FreeMarker学习代码小结

    在本篇文章中,我们将深入探讨FreeMarker的学习要点,包括其基本概念、语法以及实际应用。 一、基本概念 1. 模板(Template):FreeMarker的中心是模板文件,它是一种特殊的文本文件,包含固定文本和变量。变量是由...

    FreeMarker相关学习文档

    提供的"FreeMarker相关学习文档"可能包括模板语法详解、最佳实践、示例代码等内容,可以帮助初学者快速上手。通过阅读这些资料,你可以深入了解FreeMarker的各个方面,从而更好地利用这个强大的模板引擎。 总结,...

    Freemarker学习总结.pdf

    以下是对Freemarker中Sequence、Hash以及字符串操作函数的详细说明。 一、Sequence的内置函数: 1. `sequence?first`:返回Sequence的第一个元素,如果Sequence为空,返回null。 2. `sequence?last`:返回Sequence...

    Freemarker 学习总结

    以下是对 Freemarker 学习内容的详细总结: 一、Sequence 内置函数 1. `sequence?first`: 获取序列的第一个元素。 2. `sequence?last`: 获取序列的最后一个元素。 3. `sequence?reverse`: 反转序列中的元素顺序。 4...

Global site tag (gtag.js) - Google Analytics