freemarker自定义标签 (freemarker sql)

1.1 FreeMarker简介

l FreeMarker 是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java 编写

l FreeMarker 被设计用来生成HTML Web 页面,特别是基于MVC 模式的应用程序

l 虽然FreeMarker 具有一些编程的能力,但通常由Java 程序准备要显示的数据,由FreeMarker 生成页面,通过模板显示准备的数据(如下图)

freemarker的优势,freemarker使用教程

l FreeMarker 不是一个Web 应用框架,而适合作为Web 应用框架一个组件

l FreeMarker 与容器无关,因为它并不知道HTTP 或Servlet ;FreeMarker 同样可以应用于非Web 应用程序环境

l FreeMarker 更适合作为Model2 框架(如Struts )的视图组件,你也可以在模板中使用JSP 标记库

l FreeMarker 是免费的

1.2 使用引入

1. 需要导入freemark 的jar 包, freemarker-2.3.20.jar

2. 这里使用的是SSM 框架,在SpringMVC 的配置文件中配置freemark 的模版路径和模版解析器,如下:

<!-- freemarker模版路径配置-->

<bean id="freemarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">

<property name="templateLoaderPath" value="/xxx/xxx" />

<property name="defaultEncoding" value="UTF-8" />

<property name="freemarkerSettings">

<props>

<prop key="template_update_delay">10</prop>

<prop key="locale">zh_CN</prop>

<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>

<prop key="date_format">yyyy-MM-dd</prop>

<prop key="time_format">HH:mm:ss</prop>

<prop key="number_format">#.##</prop>

</props>

</property>

</bean>

3. Spring 本身支持了对Freemarker 的集成。只需要配置一个针对Freemarker 的视图解析器即可。这里我们使用的是Spring 与Freemarker 整合需要用到的FreeMarkerViewResolver 解析器

<!-- 配置FreeMark视图解析器 -->

<bean id="freeMarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">

<property name="contentType" value="text/html;charset=UTF-8"/>

<property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>

<property name="suffix" value=".ftl"/>

<property name="cache" value="true"/>

<property name="exposeSessionAttributes" value="true"/>

<property name="exposeRequestAttributes" value="true"/>

<property name="exposeSpringMacroHelpers" value="true"/>

<property name="allowSessionOverride" value="true"/>

<property name="order" value="1"/>

</bean>

2 ftl基本语法

2.1 if else 语句

1、if语句:<#if boolean表达式> </#if>

(1)判断后端返回的Java对象是否为空(null):<#if Java对象或者属性??> 执行代码 </#if>

说明:Java对象可以是集合、普通Java类或者属性。

(2)判断集合size:<#if 集合对象?size == 0> 执行代码 </#if>

(3)判断值相等:<#if 属性变量 == 2> 执行代码 </#if>

2、if else 语句:<#if orgList?size == 0> 执行代码 <#else> 执行代码 </#if>

2.2 list循环语句

1、遍历集合:

<#list 后端返回的集合对象 as 自定义对象> 执行代码 </#list>

示例:<#list orgList as org> 执行代码</#list>

2、范围内遍历:

示例:<#list startPage..endPage as index> </#list>

类似java代码:

int startPage =5;

int endPage =10;

for(int index=startPage;index<endPage ;index++){

System.out.println(index)

}

2.2 输出展示

1、输出后台返回的普通字符串或者数值:

<#if 变量名??>${变量名}</#if>

示例:<#if total??>${total}</#if>

2、输出后台返回的对象属性:

<#if 对象名.对象属性??>${对象名.对象属性}</#if>

示例::<#if org.orgName??>${org.orgName}</#if>

3、时间输出:

示例:<#if org.createdDate??>${org.createdDate?string("yyyy-MM-dd HH:mm:ss")}</#if>

3示例

以下是使用freemark 语法来展示数据,如下图:

freemarker的优势,freemarker使用教程

视图解析器的工作流程大致是这样的:

1.Controller 的某个方法执行完成以后,返回一个视图(比如:listUser

2. 视图解析器要做的工作就是找到某个对象来完成视图的渲染,或者跳转到其他的逻辑视图。这里的渲染对象通常就是我们的jsp 文件或者我们下面用的Freemarker( 例如listUser.jsp 或者listUser.ftl)

3 渲染完成以后,将解析结果发送到客户端浏览器