先普及一下
FreeMarker是一种比较简单的网页展示技术,是网页模板和数据模型的结合体。这种结合模式的好处就是,分离了网页界面设计人员和编程人员的工作,让他们各司其职。
FreeMarker就是一种用Java编写的模板引擎, 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
小编手头有整套智慧校园系统,是基于SSM的(Spring+Shiro+MVC),下面我就以此为例介绍一下FTL模板文件的用法
1 模板的应用
利用FTL设计网页展示页面要方便快捷的多,你可以实现设计好模板然后直接调用即可,调用代码如下:
<#include "${managerViewPath}/include/macro.ftl"/>
示例中${managerViewPath}这个路径需实现在properties配置文件中声明
managerViewPath=/WEB-INF/manager
然后在Spring配置文件spring-core.xml中声明
<description>spring 包扫描配置文件</description>
<context:annotation-config />
<context:property-placeholder location="classpath:xx.properties" />
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="xx.xx.interceptor.ActionInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
再新建ActionInterceptor.java声明变量如下:
@Value("${managerViewPath}")
private String managerViewPath;
这样只需把模板文件放在/WEB-INF/manager下面就可以在项目中随意调用了,注意文件名不要重复哦!
2、模板解析
在具体的JAVA程序文件中如何解析FTL模板呢?
@Controller("achSystemAction")
@RequestMapping("/${managerPath}/ir")
public class AchivesAction extends BaseAction{
@Autowired
private IAchivesRiz achivesRiz;
@RequestMapping("/index")
public String index(HttpServletRequest request,ModelMap model) {
return view("/ir/system/index");//返回学术管理后台文件
}
」
“view()”在哪里呢?是在BaseAction.java文件中定义的
public static String VIEW = "/manager";
protected String view(String path) {
return VIEW+path;
}
然后在配置文件spring-mvc.xml中配置freemarker
<!-- freemarker的配置 -->
<bean id="freemarkerConfig"
class="net.yijie.basic.configurer.ShiroTagFreeMarkderConfigurer">
<property name="templateLoaderPath" value="/" />
<property name="defaultEncoding" value="utf-8" />
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">1</prop>
<prop key="locale">zh_CN</prop>
<prop key="datetime_format">yyyy-MM-dd</prop>
<prop key="date_format">yyyy-MM-dd</prop>
<prop key="number_format">#.##</prop>
<prop key="auto_import">${managerViewPath}/include/macro.ftl as yj</prop>
</props>
</property>
</bean>
看到“as yj”了吧!!!这是很重要的,以后再设计FTL文件都要以此<@yj.xx></@yj.xx>为闭合
<@yj.html5>
<@yj.nav title="项目列表"></@yj.nav>
<@yj.searchForm name="searchForm" action="">
<@yj.text label="项目名" name="signName" value="" title="请输入项目名" placeholder="请输入项目名" />
<@yj.searchFormButton>
<@yj.queryButton id="submitSearch" />
</@yj.searchFormButton>
</@yj.searchForm>
</@yj.html5>