定义下面类, 会在以后模板中使用到
package com.vogella.freemarker.first; public class ValueExampleObject { private String name; private String developer; public ValueExampleObject(String name, String developer) { this.name = name; this.developer = developer; } public String getName() { return name; } public String getDeveloper() { return developer; } }
package com.vogella.freemarker.first; import java.io.File; import java.io.FileWriter; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateExceptionHandler; import freemarker.template.Version; public class MainTest { public static void main(String[] args) throws Exception { // 1. Configure FreeMarker // // You should do this ONLY ONCE, when your application starts, // then reuse the same Configuration object elsewhere. Configuration cfg = new Configuration(); // Where do we load the templates from: cfg.setClassForTemplateLoading(MainTest.class, "templates"); // Some other recommended settings: cfg.setIncompatibleImprovements(new Version(2, 3, 20)); cfg.setDefaultEncoding("UTF-8"); cfg.setLocale(Locale.US); cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); // 2. Proccess template(s) // // You will do this for several times in typical applications. // 2.1. Prepare the template input: Map<String, Object> input = new HashMap<String, Object>(); input.put("title", "Vogella example"); input.put("exampleObject", new ValueExampleObject("Java object", "me")); List<ValueExampleObject> systems = new ArrayList<ValueExampleObject>(); systems.add(new ValueExampleObject("Android", "Google")); systems.add(new ValueExampleObject("iOS States", "Apple")); systems.add(new ValueExampleObject("Ubuntu", "Canonical")); systems.add(new ValueExampleObject("Windows7", "Microsoft")); input.put("systems", systems); // 2.2. Get the template Template template = cfg.getTemplate("helloworld.ftl"); // 2.3. Generate the output // Write output to the console Writer consoleWriter = new OutputStreamWriter(System.out); template.process(input, consoleWriter); // For the sake of example, also write output into a file: Writer fileWriter = new FileWriter(new File("output.html")); try { template.process(input, fileWriter); } finally { fileWriter.close(); } } }
定义layout--utils.ftl
<#macro page> <html> <head> <title>${title}</title> </head> <body> <h1>${title}</h1> <#-- This processes the enclosed content: --> <#nested> </body> </html> </#macro> <#macro otherExample p1 p2> <p>The parameters were: ${p1}, ${p2}</p> </#macro>
创建helloworld.ftl 调用模板
layout--utils.ftl
<#import "lib/utils.ftl" as u> <@u.page> <p>${exampleObject.name} by ${exampleObject.developer}</p> <ul> <#list systems as system> <li>${system_index + 1}. ${system.name} from ${system.developer}</li> </#list> </ul> <#-- Just another example of using a macro: --> <@u.otherExample p1=11 p2=22 /> </@u.page>
http://laravel.iteye.com/
相关推荐
通过定义模板,我们可以创建可重用的布局,如头部、底部和侧边栏,然后在各个页面中插入具体的内容。这样不仅可以提高开发效率,还能保持页面设计的一致性。 **FreeMarker** FreeMarker是一个模板语言,它与Java...
在实际应用中,FreeMarker需要在Web应用程序的配置文件(如web.xml)中进行配置,定义FreeMarker的路径、缓存策略等。同时,需要在Servlet中创建`Template`对象,并用`Configuration`对象加载模板文件,以便于渲染...
Struts2-layout则是对这一核心功能的补充,它专注于视图部分的管理,通过预定义的布局模板,简化了页面布局的复杂性。 在Struts2中,Action类处理业务逻辑,而视图由JSP页面或FreeMarker模板等技术负责渲染。Struts...
在这个方案中,`pdfGenerate.ftl`是一个FreeMarker模板文件,用于定义PDF的布局和内容。例如,它可能包含如下的模板语法: ```html <!DOCTYPE html> <title>PDF报告 ${reportTitle} ${content} ``` ...
- **用途**: 定义模板中的属性映射。 **10. 标签** - **示例**: `<#myTag param="value">...</#myTag>` - **用途**: 定义自定义的标签。 **11. 宏** - **示例**: `<#macro myMacro param> ... </#macro>` - **用途...
Structs2的核心概念包括Action、Interceptor(拦截器)、Layout(布局)和Freemarker模板引擎等。Action是处理用户请求的核心组件,它接收请求,处理业务逻辑,并返回结果。Interceptor则允许在Action执行前后插入...
Beetl模板引擎是由中国的开源社区开发,它在设计上吸取了其他模板引擎的优点,如FreeMarker、Velocity等,并在性能、易用性、功能全面性等方面有所提升。Beetl支持丰富的语法结构,包括表达式、控制语句、函数、...
这些tiles可以是静态HTML,也可以是动态生成的内容,如JSP、FreeMarker或Velocity模板。 在Tiles框架中,我们首先定义布局模板,这些模板描述了网页的整体结构,然后将具体的页面内容插入到模板的各个位置。布局...
主题主题是整个网站的外观和感觉,通常主题是以下各项的容器: template :或主站点的模板,定义站点的主要外观,并在模板级别添加脚本,模板定义: 模板脚本:使用模板语言(目前为freemarker)对主要网站HTML结构...
- **提高开发效率**:通过定义模板,可以减少重复编码的工作量,使开发者能够更加专注于业务逻辑的编写。 - **增强代码的可维护性**:当网站需要整体风格调整时,只需要修改模板文件即可,无需逐个修改每个页面,极...
独特功能:Beetl有些功能是发展了10多年的模板引擎所不具备的,这些功能非常利于模板的开发和维护,如下:1、自定义占位符和控制语句起始符号,这有利于减小模板语法对模板的倾入性,比如在html模板中,如果定义控制...
例如,我们可以定义一个Tiles模板`baseLayout`,包含头部、主体和底部三个部分。然后在Controller中,针对不同的请求返回不同的内容填充主体部分。 ```xml <!-- tiles-defs.xml --> <definition name="baseLayout...
除了基础功能,sitemesh 还提供了很多高级特性,如:自定义装饰器选择策略、页面属性传递、支持 Velocity 和 FreeMarker 等模板引擎等。这些特性使得 sitemesh 能够适应更复杂的项目需求。 通过这个“sitemesh简单...
- **视图(View)**:负责展示数据,通常使用 JSP、Thymeleaf 或 FreeMarker 等模板引擎来呈现。 - **控制器(Controller)**:作为模型和视图之间的桥梁,接收用户请求,处理并转发到相应的模型,最后决定返回...
Thymeleaf 的 th 标签大全 ...Thymeleaf 的 th 标签提供了多种方式来控制模板的输出,包括文本替换、属性设置、事件绑定、条件判断、循环输出、代码片段定义等。这些标签可以帮助开发者快速生成动态的 Web 应用程序。
4. **View**:视图负责渲染结果,可以通过JSP、FreeMarker等模板引擎实现。 5. **视图解析器**:如InternalResourceViewResolver,将逻辑视图名转换为实际资源路径。 6. **依赖注入**:SpringMVC利用Spring框架的DI...
开发者可以通过编写Java Portlets、JSR-286 Portlets或者Freemarker模板来扩展功能。同时,Liferay提供了服务建模工具,可以方便地生成服务API,简化开发过程。对于前端界面,Liferay支持AngularJS、React等现代前端...
Liferay提供了基于FreeMarker和CSS的主题模板,开发者可以通过修改这些模板来创建自己的定制主题。 在开发过程中,你可能需要配置Liferay以连接到不同的数据库,例如MySQL。在Apache Tomcat的`conf/Catalina/...