一、准备工作
1.1 下载文件
可以从https://www.wendangku.net/doc/2517775276.html,/站点下载最新的freemarker.jar包(目前最新版本是2.3.18)与eclipse插件(最新版本是0.9.14)。
1.2 安装eclipse插件
将下载来的eclipse插件解压缩到本地磁盘,更改hudson.freemarker_ide_0.9.14文件夹中的freemarker-2.3.6.jar文件更改成最新版本的freemarker-2.3.18.jar,并且将META-INF/MANIFEST.MF文件中的Bundle-ClassPath属性值修改为freemarker-2.3.18.jar。最后将hudson.freemarker_ide_0.9.14放到eclipse的plugins目录中,完成eclipse 插件的安装。
1.3 freemarker文档下载
从https://www.wendangku.net/doc/2517775276.html,/官方网站中下载帮助文档(也有中文的手册)
二、freemarker的使用
2.1 简介
2.1.1 FTL tag标签
由于freemarker tag标签是属于freemarker的指令,它们仅仅是freemarker 处理过程中的信息,而不会输出到页面上,所以它们与html标签有一些区别。这些标签都是以#号开头,如<#import "/public/work_public.ftl" as public>。但用户自定义的标签是以@符号开头,如在freemarker中使用struts标签:<@s.if test="results!=null&&results.size()!=0">
注意FTL标签不可以在其他FTL标签和插值中使用(注释可以在FTL标签和插值中使用,因为它在解析时,整个注释都将抛弃,不会影响具体代码),如下面这样就是一个错误的写法:
<#if <#include 'foo'>='bar'>...#if>
2.1.2 注释
freemarker的文档注释与html相似,但它是以<#--和-->来分割的。任何介于这两个分隔符(包含分隔符本身)之间内容会被freemarker忽略,就不会输出出来了。其他任何不是FTL 标签,插值或注释的内容将被视为静态文本,这些东西就不会被freemarker所解析,会被按照原样输出出来。
2.1.3 引入外部文件
如果模板文件使用了struts2标签,则可以这样调用:
<@s.include value="/public/publis.jsp" />
在freemarker版本2.3.15及其以后都可以使用如下方式引入外部文件:
<@include_page path="/public/publis.jsp"/>或者使用:<#include "/copyright_footer.html">的方式引入外部文件。
注意:<#include "/copyright_footer.html">是为了包含freemarker模板而不会牵涉到servlet容器,使用<#include..>包含的模板和包含它的模板共享模板处理状态,比如数据模型和模板语言变量,而<@include_page..>开始一个独立的HTTP请求处理。
对于js、css等其他外部资源的引入方式不变,依旧是类似:
注意该路径与ftl文件路径地址无关,而是真正的访问路径。
2.2 freemarker与spring的集成
将freemarker.jar包放到web工程的lib目录中,并在web.xml文件中加入如下的代码:
freemarker.ext.servlet.FreemarkerServlet
2.3 freemarker中使用struts标签
由于freemarker本身的标签在变量名不存在或变量为null的情况下处理比较复杂(它不允许出现这两种情况的变量,在使用可能出现变量名不存在或null值的变量时,首先需要判断该变量是否存在,否则当出现这两种情况时,freemarker会报解析错误,这将直接在最终生成的html页面中显示出来),所以当不能确定该值是否存在时,可以在freemarker中使用struts标签,它没有这类的问题(freemarker也提供了判断一个值是否为空的情况,如${list!}或者使用<#if指令来判断指定的变量是否存在:<#if list?exists && list!=null>#if>或<#if list!=null>#if>)。
首先将struts2-core.jar包中的struts-tags.tld文件加入到WEB-INF/tags 文件夹中
然后在需要加入struts2标签的freemarker的ftl文件头部加入如下语句:
<#assign s=JspTaglibs["/WEB-INF/tags/struts-tags.tld"]>
注意:与在jsp中使用标签类似,每个使用ftl文件的头部都需要加上上述#assign 标签,在公共文件中加入上述#assign后,其他引用该公共文件的ftl文件中若想使用struts标签的话,也是需要再次加入的。
例如:strtus2的判断语句在freemarker文件中的使用方式如下:
<@s.if test="results!=null&&results.size()!=0">
${public_count_data}<@s.property value="results.size()"/> @s.if>
<@s.else>
${public_none_data}
@s.else>
2.4 变量
在freemarker中变量是区分大小写的,如list就不能写成List。定义变量使用assign标签,具体使用如:<#assign test_string="字符串">,也可以使用如<#assign test_string_array=["字符串1","字符串2","字符串3"]>的方式来定义数组(或列表)
可以使用如下两种方式在页面上显示一个变量:
struts2的property标签
<@s.property value="#https://www.wendangku.net/doc/2517775276.html,er_name"/>
freemarker的${}标签
${myobj} myobj可以是后台传递的变量,也可以是在模板文件中定义的变量
处理不存在的变量
由于直接使用freemarker标签会经常碰到不存在的变量或变量值为null的情况,而freemarker则不支持使用这样的变量,因此在可能出现不存在的变量或变量值为null 时,首先需要判断该变量是否存在(是否不为null)。
如:${RequestParameters['locale']!'zh_CN',这时,如果URL参数中的locale属性不存在,则返回'zh_CN'这段字符串,如果存在,则'zh_CN'将不起任何作用。
或者使用<#if user??>
2.5 列表
一般界面上可以使用两种形式来循环列表,一种是使用struts2中的iterator标签,另一种是使用freemarker的list标签。下面就这两种标签做一些描述:
struts2的iterator标签
<@s.iterator id="user" value="results" status="index"> <@s.property value="#https://www.wendangku.net/doc/2517775276.html,er_name"/>
@s.iterator>
说明:
value="results"指的是从后台action中传递过来的列表results,即在action 中定义一个results的变量,然后定义一个get方法即可在前台页面中使用。如果results值不是从后台获取的,那么可以使用value="{'a','b','c'}"这种方式。
id="user"指的是results列表中的每一个对象,如在循环中的:<@s.property value="#https://www.wendangku.net/doc/2517775276.html,er_name"/>可以循环的显示出results中每一个对象的user_name属性。
status="index"这是一个标识行数的属性,如<@s.property value="#index.index"/>它表示当前项在循环中的步进索引的数值,该值从0开始。也可以使用#index.odd这个属性来判断当前项在循环中步进索引的数值是偶数还是奇数,当#index.odd为true时,表示为偶数,为false时,表示为奇数。
freemarker的list标签
<#assign mylist=['a', 'b', 'c']>
<#list mylist as myobj>
${myobj_index}: ${myobj}
<#if myobj_has_next>,#if>#list>
说明:
<#assign mylist=['a', 'b', 'c']>定义一个定长数组,数组中包含3个元素。
<#list mylist as myobj>循环mylist数组,每个数组变量在循环时取一个别名:myobj,类似Java中的for(String myobj: mylist){}。mylist也可以更换成后台Java代码中的对象,如results:<#list results as user>
${myobj_index}这是一个包含当前项在循环中的步进索引的数值。
<#if myobj_has_next>,#if>来辨别当前项是否是序列的最后一项的布尔值。
${myobj}在页面上显示myobj数据。
如果需要跳出list循环的话,可以使用<#break>来退出当前循环
1.在搭建SSH开发平台的时候,由MyEclipse自动导入的包存在一些冲突,主要有 (1) asm.jar与asm-2.2.3.jar asm-2.2.3是spring所依赖,而asm.jar是hibernate依赖的,应该删除asm-2.2.3.jar这个包 (2). commons-logging-1.0.4.jar与commons-logging-api-1.1.jar 这两个包中commons-logging-1.0.4.jar是spring和hibernate以及struts都要用的包,但是struts2.1以上的版本还需要commons-logging-api-1.1.jar,其实这两个包几乎一样,commons-logging-api-1.1.jar版本较新而已。 (3)异常 严重: Exception starting filter struts2 https://www.wendangku.net/doc/2517775276.html,ng.NullPointerException at com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance(SpringObjectF actory.java:203) ... 可能的原因是spring的默认配置文件applicationContext.xml改了名,或者没有放在classpath的根路径下面,并且没有在web.xml文件中配置spring的监听器,解决办法在web.xml中添加
大气环境影响预测系统使用者参考手册 一、简介 大气环境影响预测系统是一款由浙江省环科院环评二所任剑波工程师开发的预测大气环境影响的界面化软件,其主要功能是对各类型污染源在不同条件下排放污染物进行模拟,计算其所造成的污染物地面浓度分布,用量化的方法预测污染源对大气环境的影响。 大气环境影响预测系统的核心模块采用《环境影响评价技术导则-大气环境》(HJ2.2-2008)推荐的美国Environmental Protection Agency的AERMOD预测模型和SCREEN3估算模式。AERMOD是一个稳态羽烟扩散模式,可基于大气边界层数据特征模拟点源、面源、体源等排放出的污染物在短期(小时平均、日平均)、长期(年平均)的浓度分布,适用于农村或城市地区、简单或复杂地形。AERMOD考虑了建筑物尾流的影响,即烟羽下洗。模式使用每小时连续预处理气象数据模拟大于等于1小时平均时间的浓度分布。AERMOD包括两个预处理模式,即AERMET气象预处理和AERMAP地形预处理模式。AERMOD适用于评价范围小于等于50km的一级、二级评价项目。 估算模式SCREEN3 是一个单源高斯烟羽模式,可计算点源、火炬源、面源和体源的最大地面浓度,以及下洗和岸边熏烟等特殊条件下的最大地面浓度。估算模式中嵌入了多种预设的气象组合条件,包括一些最不利的气象条件,在某个地区有可能发生,也有可能没有此种不利气象条件。所以经估算模式计算出的是某一污染源对环境空气质量的最大影响程度和影响范围的保守的计算结果。 二、操作界面介绍 大气环境影响预测系统界面非常友好,继承了windows操作系统软件的特点。其最上方为命令菜单;在命令菜单的下方是快捷工具栏;左侧区域为目标管理窗口,可以更加方便的进行输入和管理预测模型所需的各类参数数据;右侧区域为工作区,用户可在此直接操作,例如添加底图,标明污染源、计算区域和预测点位置等。 1.菜单栏 本软件操作界面中的菜单栏分为文件、显示、运行、计算结果、工具和关于六项。各命令菜单包含的内容如下: ·文件 新建; 打开; 保存; 另存为; 保存inp文件; 打开示例文件; 退出 ·显示 污染源; 预测点; 计算网格; 建筑物; 显示标尺;
Spring开发教程 Spring教程 (1) Spring框架概述 (2) Spring是什么? (2) Spring的历史 (3) Spring的使命(Mission Statement) (3) Spring受到的批判 (3) Spring包含的模块 (4) 总结 (5) Spring的IoC容器 (6) 用户注册的例子 (6) 面向接口编程 (7) (用户持久化类)重构第一步——面向接口编程 (8) 重构第二步——工厂(Factory)模式 (9) 重构第三步——工厂(Factory)模式的改进 (9) 重构第四步-IoC容器 (10) 控制反转(IoC)/依赖注入(DI) (10) 什么是控制反转/依赖注入? (10) 依赖注入的三种实现形式 (11) BeanFactory (13) BeanFactory管理Bean(组件)的生命周期 (14) Bean的定义 (15) Bean的之前初始化 (19) Bean的准备就绪(Ready)状态 (21) Bean的销毁 (21) ApplicationContext (21) Spring的AOP框架 (21) Spring的数据层访问 (21) Spring的声明式事务 (21) Spring对其它企业应用支持 (22)
名词解释 容器: 框架: 框架 容器 组件: 服务: Spring框架概述 主要内容:介绍Spring的历史,Spring的概论和它的体系结构,重点阐述它在J2EE中扮演的角色。 目的:让学员全面的了解Spring框架,知道Spring框架所提供的功能,并能将Spring 框架和其它框架(WebWork/Struts、hibernate)区分开来。 Spring是什么? Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring 的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 ?目的:解决企业应用开发的复杂性 ?功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 ?范围:任何Java应用 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 ■轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 ■控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。 ■面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实
一、准备工作 1.1 下载文件 可以从https://www.wendangku.net/doc/2517775276.html,/站点下载最新的freemarker.jar包(目前最新版本是2.3.18)与eclipse插件(最新版本是0.9.14)。 1.2 安装eclipse插件 将下载来的eclipse插件解压缩到本地磁盘,更改hudson.freemarker_ide_0.9.14文件夹中的freemarker-2.3.6.jar文件更改成最新版本的freemarker-2.3.18.jar,并且将META-INF/MANIFEST.MF文件中的Bundle-ClassPath属性值修改为freemarker-2.3.18.jar。最后将hudson.freemarker_ide_0.9.14放到eclipse的plugins目录中,完成eclipse 插件的安装。 1.3 freemarker文档下载 从https://www.wendangku.net/doc/2517775276.html,/官方网站中下载帮助文档(也有中文的手册) 二、freemarker的使用 2.1 简介 2.1.1 FTL tag标签 由于freemarker tag标签是属于freemarker的指令,它们仅仅是freemarker 处理过程中的信息,而不会输出到页面上,所以它们与html标签有一些区别。这些标签都是以#号开头,如<#import "/public/work_public.ftl" as public>。但用户自定义的标签是以@符号开头,如在freemarker中使用struts标签:<@s.if test="results!=null&&results.size()!=0"> 注意FTL标签不可以在其他FTL标签和插值中使用(注释可以在FTL标签和插值中使用,因为它在解析时,整个注释都将抛弃,不会影响具体代码),如下面这样就是一个错误的写法: <#if <#include 'foo'>='bar'>...#if> 2.1.2 注释 freemarker的文档注释与html相似,但它是以<#--和-->来分割的。任何介于这两个分隔符(包含分隔符本身)之间内容会被freemarker忽略,就不会输出出来了。其他任何不是FTL 标签,插值或注释的内容将被视为静态文本,这些东西就不会被freemarker所解析,会被按照原样输出出来。
语法 FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1. 文本:直接输出的部分 2. 注释:<#-- ... -->格式部分,不会输出 3. 插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出 4. FTL指令:FreeMarker指定,和HTML标记类似,名字前加#予以区分,不会输出 1. FTL指令规则 在FreeMarker中,使用FTL标签来使用指令,FreeMarker有3种FTL标签,这和HTML标签是完全类似的. 1.开始标签:<#directivename parameter> 2.结束标签:#directivename> 3.空标签:<#directivename parameter/> 实际上,使用标签时前面的符号#也可能变成@,如果该指令是一个用户指令而不是系统内建指令时,应将#符号改成@符号. 使用FTL标签时, 应该有正确的嵌套,而不是交叉使用,这和XML标签的用法完全一样.如果全用不存在的指令,FreeMarker不会使用模板输出,而是产生一个错误消息.FreeMarker会忽略FTL标签中的空白字符.值得注意的是< , /> 和指令之间不允许有空白字符. 2. 插值规则 FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format} 2.1 通用插值 对于通用插值,又可以分为以下4种情况: 1. 插值结果为字符串值:直接输出表达式结果 2. 插值结果为数字值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输 出.可以使用内建的字符串函数格式化单个插值,如下面的例子: <#settion number_format="currency"/> <#assign answer=42/> ${answer} ${answer?string} <#-- the same as ${answer} --> ${answer?string.number} ${answer?string.currency} ${answer?string.percent}
媒资管理系统Array TRS Media Asset System 置标使用手册 北京拓尔思信息技术股份有限公司 Beijing TRS Information Technology Co., Ltd.
版权说明 本手册由北京拓尔思信息技术股份有限公司(以下简称TRS公司)出版,版权属TRS公司所有。未经出版者正式书面许可,不得以任何方式复制本文档的部分或全部内容。 ?北京拓尔思信息技术股份有限公司版权所有。保留所有权利。 是北京拓尔思信息技术股份有限公司的注册商标。
关于本手册 置标使用手册介绍了MAS5.0中置标组件的基本使用,并提供了相关实例,方便理解置标模板的编写以及使用,进而完成前台页面定制功能。 读者对象 本手册的读者为TRSMAS的使用者。使用者应具备以下基础知识: ●熟悉Windows或Linux操作系统; ●熟悉Oracle、MySQL、Microsoft SQL Server; ●熟悉HTML基本知识 ●掌握基本的编程技巧 用户反馈 TRS公司感谢您使用TRS 产品。如果您发现本手册中有错误或者产品运行不正确,或者您对本手册有任何意见和建议,请及时与TRS公司联系。您的意见将是我们做版本修订时的重要依据
目录 第1章概述 (1) 第2章使用说明 (2) 2.1快速入门 (2) 2.2管理台使用 (3) 2.2.1 站点(Site) (3) 2.2.2 映射(Pagelink) (3) 2.2.3 模板(Template) (4) 2.3站点规划 (5) 2.3.1 站点规划 (5) 2.3.2 映射规划 (5) 2.4模板规划 (6) 2.4.1 将主页面划分成块 (6) 2.4.2 使用TRS_PAGELET填充各块 (7) 2.4.3 编写小模板 (9) 2.4.4 完善TRS_PAGELET的属性 (9) 2.4.5 切换模板展示方式 (11) 2.5获取相关模板实例 (13) 第3章置标详细参考 (14) 3.1置标规范实例 (14) 3.1.1 OBJECTS - PROPERTY(一组数据) (14) 3.1.2 OBJECT - PROPERTY (一个数据) (15) 3.1.3 OBJECTS – (PROPERTY + PAGE)(组数据分页展示) (15) 3.1.4 OBJECTS –OBJECT –PROPERTY (折行显示列表数据) (16) 3.1.5 OBJECTS-(PROPERTY+OBJECTS-PROPERTY)(树状) (17) 3.1.6 OBJECTS-SWITCH-PROPERTY(条件显示) (18) 3.1.7 LINKGROUP – LINK链接着色 (19) 3.2置标详细说明 (19) 3.2.1 TRS_OBJECTS置标 (19) 3.2.2 TRS_OBJECT置标 (20) 3.2.3 TRS_PROPERTY置标 (21) 3.2.4 TRS_PAGE置标 (23) 3.2.5 TRS_SWITCH置标 (24) 3.2.6 TRS_LOOP置标 (25) 3.2.7 TRS_LINKGROUP置标 (26) 3.2.8 TRS_LINK置标 (28) 3.2.9 TRS_PAGELET置标 (28)
FreeMarker FreeMarker Java FreeMarker HTML Web MVC FreeMarker Java FreeMarker FreeMarker Web Web FreeMarker HTTP Servlet FreeMarker Web FreeMarker Model2 Struts JSP FreeMarker 1
HTML XML RTF Java Servlet Email Web Web 2 include if/elseif/else HTML 3 FreeMarker Java Java JavaBean XML SQL
4 Web Web HTML Model2 Web JSP JSP MVC 5 UNICODE US 6 XML <#recurse> <#visit> 2.3 XML XML FreeMarker (1)
1 1 + = FreeMarker —— HTML Web Web HTML FreeMarker
HTML ${…} FreeMarker FreeMarker Template user latestProduct.url https://www.wendangku.net/doc/2517775276.html, data model (root) | +- user = "Big Joe" | +- latestProduct | +- url = "products/greenmouse.html" | +- name = "green mouse" latestProduct user url name url name latestProduct
FreeMarker macro(宏)的使用.txt14热情是一种巨大的力量,从心灵内部迸发而出,激励我们发挥出无穷的智慧和活力;热情是一根强大的支柱,无论面临怎样的困境,总能催生我们乐观的斗志和顽强的毅力……没有热情,生命的天空就没的色彩。FreeMarker macro(宏)的使用 有人说用freemarker,但没有用到它的宏(macro),就=没有真正用过freemarker。说的就是宏是freemarker的一大特色。 宏的定义可以查看相关的文档,里面介绍得很清楚,下面来看看它的一个用法(javaeye 帖子里有讨论)。 /WEB-INF/template/common/: <#macro html title>