1. 编写函数
public class FtlCheckPermissionMethod implements TemplateMethodModel {
@SuppressWarnings("rawtypes")
@Override
public Object exec(List args) throws TemplateModelException {
String permissionsStr = args.get(0).toString();
String permission = args.get(1).toString();
String[] permissionsArray = permissionsStr.split(SessionUtil.PERMISSION_SPLIT);
for (String per : permissionsArray) {
if (permission.equals(per)) {
return true;
}
}
return false;
}
}
2.注册与使用
有两种方式:
(1).在模板文件中注册,在模板中使用
<#assign checkPermission= "com.beyondsoft.common.util.FtlCheckPermissionMethod"?new()>
<#macro leftMenu menu>
<div class="left_block clearfix">
<div class="leftmenu">
<ul>
<#if checkPermission(permissions,"VW_ACCOUNT")>
<li <#if menu == "Account_Management">class="on"</#if>><a href="javascript:windowLocationHref('${base}/account/initAddNewAccount.do');">Account Management</a></li>
</#if>
<#if checkPermission(permissions,"VW_ROLE_MANAGEMENT")>
<li <#if menu == "Role_Management">class="on"</#if>><a href="javascript:windowLocationHref('${base}/role/initRoleManagement.do');">Role Management</a></li>
</#if>
<#if checkPermission(permissions,"VW_RESET_PASSWORD")>
<li <#if menu == "Reset_Password">class="on"</#if>><a href="javascript:windowLocationHref('${base}/reset/initReset.do');">Reset Password</a></li>
</#if>
<#if checkPermission(permissions,"VW_REVIEW_HISTORY")>
<li <#if menu == "Review_History">class="on"</#if>><a href="javascript:windowLocationHref('${base}/review/review.do');">Review History</a></li>
</#if>
</ul>
</div>
<span></span>
</div>
</#macro>
(2).处理模板文件时注册
关键代码:
Map<String,Object> root=new HashMap<String, Object>();
root.put("getSysdate", new StringLengthMethod());
Configuration config=new Configuration();
File file=new File(templatePath); //并加载模板文件
config.setDirectoryForTemplateLoading(file); //设置包装器,并将对象包装为数据模型
config.setObjectWrapper(new DefaultObjectWrapper()); //获取模板,并设置编码方式,这个编码必须要与页面中的编码格式一致
Template template=config.getTemplate(templateName,templateEncoding); //合并数据模型与模板
template.process(root, out);
分享到:
相关推荐
此外,FreeMarker还支持自定义函数,它们类似于JavaScript中的函数,可以接收参数并返回值。创建自定义函数的方式与自定义指令类似,只是需要实现`TemplateMethodModelEx`接口。 为了调试和优化自定义标签,了解...
除了内置函数,FreeMarker还支持通过`<#function>`标签创建自定义函数,以便扩展其功能。 了解并熟练使用这些内置函数,能够显著提升在FreeMarker模板中的开发效率,使模板代码更加简洁和高效。在实际应用中,可以...
在这个主题“freemarker自定义分页标签宏”中,我们将深入探讨如何在FreeMarker中创建自定义的分页标签宏,以便更有效地管理和展示大量数据。 首先,分页是一种常见的网页设计技术,用于将大量数据分割成小块,使...
Freemarker支持条件判断、循环结构、内置函数,以及自定义标签,增强了模板的灵活性。与JSP相比,Freemarker通常被认为更简洁、易读且更易于维护。 将这三个框架结合使用,可以构建出高效、灵活的Java Web应用。...
在本讨论中,我们将深入探讨如何自定义`eval()`函数以提高代码的安全性和效率,同时也会涉及到JavaScript的动态执行特性以及其在实际开发中的应用。 首先,`eval()`的默认行为是将其接收到的字符串当作JavaScript...
除了内置函数,还可以通过`<#function>`定义自定义函数,或者使用`<@myMacro>`调用已定义的宏。 通过以上内容,你应该对Freemarker的内置函数有了基本的认识。实践是最好的老师,尝试在自己的项目中应用这些函数,...
4. **函数和方法**:Freemarker支持自定义函数和方法,可以使用内置的函数库,如字符串操作、数学计算等,也可以扩展自定义函数来满足特定需求。 5. **模板继承和导入**:通过`<#import>`和`<#extends>`,模板可以...
4. **高级特性**:如模板继承(template inheritance)、模板元数据(metainfo)、自定义函数库(freemarker functions)等。 《freemarker-2.3.16》可能是Freemarker 2.3.16的源码或二进制库,对于开发者来说,...
1. 自定义指令:可以扩展Freemarker,创建自定义指令以满足特定需求。 2. 缓存机制:Freemarker支持缓存模板,提高性能。 3. 国际化支持:通过`#localize`和`#fmt`指令处理多语言内容。 4. 静态文本和HTML转义:`...
同时,还可以自定义函数和宏来扩展功能。 10. **模板调试** Freemarker提供了一个调试模式,可以帮助开发者找出模板中的错误,比如未定义的变量、语法错误等。 这个"freemarker Demo"项目应该包含了基本的模板...
Freemarker支持自定义函数,通过`<#function>`定义。同时,它能够与Java的自定义标签库(如JSTL)配合,提供更丰富的功能,如国际化、日期时间处理等。 7. 安全特性 Freemarker提供了安全模式,可以在不信任用户...
4. **函数和宏**:Freemarker提供了内置函数,如`htmlEscape`用于转义HTML特殊字符,同时用户可以自定义宏来封装重复的模板片段。 5. **模板配置**:可以通过`freemarker.cfg.properties`文件配置模板解析的全局选项...
4. **内置函数和指令**:Freemarker提供了一系列内置函数和指令,如`?html`用于防止XSS攻击,`<#if>`、`<#else>`、`<#foreach>`等用于控制流程。这些功能增强了模板的灵活性和可编程性。 5. **国际化支持**:...
FreeMarker支持多种指令,如`<#if>`、`<#else>`、`<#else_if>`用于条件判断,`<#foreach>`、`<#break>`、`<#continue>`用于循环控制,`<#assign>`、`<#global>`进行变量定义,`<#function>`自定义函数等。...
- **自定义函数和标签**:通过`TemplateMethodModelEx`接口实现自定义方法,`TemplateDirectiveModel`接口实现自定义标签。 - **模板缓存**:提高性能,减少不必要的模板编译。 3. **Jeecms标签使用** - **...
Freemarker支持条件语句(`<#if>`、`<#else>`)、循环(`<#foreach>`)以及自定义函数(`<#function>`),使得模板可以处理更复杂的情况。 在实际应用中,我们通常会将这些步骤封装到一个服务类或工具类中,以便在...
### Freemarker 使用总结与详解 #### 一、Freemarker 概述 Freemarker 是一种用于生成动态页面的模板引擎。它不依赖任何 Web 容器,可以在任何 Java 应用程序中使用。Freemarker 的核心优势在于其简单易学且功能...
4. **函数调用**:Freemarker支持自定义函数,如 `${user.formatDate(date)}`。 四、实际应用示例 假设我们有一个用户类`User`,包含`id`、`name`和`email`属性,我们可以创建一个`user.ftl`模板: ```ftl public...
例如,`<#if>`用于条件判断,`<#foreach>`用于循环,`<#assign>`用于变量赋值,`<#function>`定义自定义函数。这些元素使得开发者可以在模板中灵活地控制输出内容。 2. **数据模型与变量**: 在Freemarker中,数据...
4. 功能调用:可以使用`<#function>`定义自定义函数,并在模板中调用。 5. 转义:`<@...>`用于调用Freemarker内置的函数或宏,例如`<@include>`用于包含其他模板。 三、Freemarker与Spring MVC集成 在Java Web开发...