freemarker/velocity/thymeleaf/pdf 视图插件
- 在 MainModule 的
@IocBy
中增加 "*org.nutz.plugins.view.freemarker.FreemarkerIocLoader" - 在 MainModule 中增加
@Views(FreemarkerViewMaker.class)
- 如需自定义模板相关内容,请复制一份 freemarker.js 到/ioc 目录下,并修改相应内容
var ioc = {
currentTime : {
type : "org.nutz.plugins.view.freemarker.directive.CurrentTimeDirective"
},
configuration : {
type : "freemarker.template.Configuration"
},
freeMarkerConfigurer : {
type : "org.nutz.plugins.view.freemarker.FreeMarkerConfigurer",
events : {
create : 'init'
},
args : [ {
refer : "configuration"
}, {
app : '$servlet'
}, "WEB-INF", ".ftl", {
refer : "freemarkerDirectiveFactory"
} ]
},
freemarkerDirectiveFactory : {
type : "org.nutz.plugins.view.freemarker.FreemarkerDirectiveFactory",
fields : {
freemarker : 'org/nutz/plugins/view/freemarker/freemarker.properties',
}
}
};
已自带标签函数currentTime
,在需要显示的地方自行填加标签 <@currentTime />
,更多使用方法请参考官方 nutzbook 中的使用配置
如自定义标签加载 请在js中添加
mapTags : {
factory : "$freeMarkerConfigurer#addTags",
args : [ {
'abc' : 1,
'currentTime' : {
refer : 'currentTime'
},
ioc' : {
refer : '$ioc'
},
'conf' : {
java : '$conf.toMap()'
},
'cdnbase' : {
java : "$conf.get('cdnbase')"
}
} ]
}
这样可以在模板中直接调用标签
<@currentTime /> ${rekoe} ${conf['emai.to']} ${abc}
- 在 MainModule 的
@IocBy
中增加 "*org.nutz.plugins.view.freemarker.ThymeleafIocLoader" - 在 MainModule 中增加
@Views(ThymeleafViewMaker.class)
- 在
@Ok
注解中用th
表示使用 thymeleaf 视图渲染,如@Ok("th:home/index")
- 如需自定义模板相关内容,请创建一份 thymeleaf.js 到/ioc 目录下,并修改
thymeleafProperties.fields
中的相应内容
var ioc = {
thymeleafProperties: {
type: "org.nutz.plugins.view.thymeleaf.ThymeleafProperties",
fields: {
prefix: "/WEB-INF/template/",
suffix: ".html",
mode: "HTML5",
encoding: "UTF-8",
contentType: "text/html",
cache: true,
cacheTTLMs: 3600000
}
}
};
- 如需添加其他扩展,只需创建该扩展后注入即可
var ioc = {
java8TimeDialect: { type: "org.thymeleaf.extras.java8time.dialect.Java8TimeDialect" },
thymeleafProperties: {
type: "org.nutz.plugins.view.thymeleaf.ThymeleafProperties",
fields: {
dialects: [ { refer: "java8TimeDialect" } ]
}
}
};
- 添加依赖
<dependency>
<groupId>org.nutz</groupId>
<artifactId>nutz-plugins-views</artifactId>
<version>${nutz.plugins.version}</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-tools</artifactId>
<version>2.0</version>
</dependency>
- 主模块配置
@Views({ VelocityViewMaker.class })
public class MainModule {
}
- classpath配置
在classpath下增加 velocity.properties内容如下:
#资源加载器或加载器别名
resource.loader = webapp
#资源加载器类全限定名
webapp.resource.loader.class = org.apache.velocity.tools.view.WebappResourceLoader
#资源位置
webapp.resource.loader.path=/WEB-INF/
#编码
input.encoding=UTF-8
output.encoding=UTF-8
#布局文件为准
tools.view.servlet.layout.directory = layout/
#默认布局文件名称
tools.view.servlet.layout.default.template =default.html
#默认错误文件名称
tools.view.servlet.error.template =Error.vm
tools.view.servlet.layout.default.template =Default.vm
- web.xml配置
nutz的filter或者servlet加上初始化参数
<init-param>
<param-name>org.apache.velocity.properties</param-name><!-- 这个不能修改-->
<param-value>velocity.properties</param-value> <!-- 对应上一步中配置文件的位置 -->
</init-param>
- 使用方法
User类
public class User {
public int roleId;
public String userName;
public int getRoleId() {
return roleId;
}
public void setRoleId(int roleId) {
this.roleId = roleId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
MVC类
@At("/")
@Ok("vm:/tmpl/main.vm")
public User main() {
User user = new User();
user.setUserName("nutz");
user.setRoleId(0);
return user;
}
main.vm文件
#if($!{obj.roleId} == 0)
<li> 管理员 $!{obj.userName}</li>
#else
<li> 编辑 $!{obj.userName}</li>
#end
- 更灵活的使用方法
MVC类
@At("/")
@Ok("vm:/tmpl/main.vm")
public NutMap main() {
NutMap map = new NutMap();
map.put("site_name", "Nutz工具箱");
User user = new User();
user.setRoleId(0);
user.setUserName("nutz");
map.put("user", user);
return map;
}
main.vm文件
<span> 站点名称:$!{obj.site_name}</span>
#if($!{obj.user.roleId} == 0)
<li> 管理员 $!{obj.user.userName}</li>
#else
<li> 编辑 $!{obj.user.userName}</li>
#end
-
扩展工具
- 实现一个工具类
package com.tdb.utils; import org.apache.velocity.tools.config.DefaultKey; import org.apache.velocity.tools.config.InvalidScope; /** * author Jiangkun * created on 2016年5月22日 */ @DefaultKey("C") @InvalidScope({ "application" }) public class CommonUtils { public static final int HIDDEN_LENGTH = 7; public static final String HIDDEN_IDENTIFER = "*"; /** * 对商户端隐藏券号码 * eg: 0004123456789012 -> 0004*******012 * @param ticketno * @return */ public static String hideTicketNo(String ticketno) { StringBuffer sb = new StringBuffer(); String prefix = ticketno.substring(0, 4); String suffix = ticketno.substring(4+HIDDEN_LENGTH); sb.append(prefix); for(int i=0;i<HIDDEN_LENGTH;i++) sb.append(HIDDEN_IDENTIFER); sb.append(suffix); return sb.toString(); } }
- 在WEB-INF目录添加tools.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<tools>
<data type="boolean" key="VIEW_TOOLS_AVAILABLE" value="true"/>
<toolbox scope="request">
<tool class="org.apache.velocity.tools.view.CookieTool"/>
<tool class="org.apache.velocity.tools.view.ImportTool"/>
<tool class="org.apache.velocity.tools.view.IncludeTool"/>
<tool class="org.apache.velocity.tools.view.LinkTool"/>
<tool class="org.apache.velocity.tools.view.ParameterTool"/>
<tool class="org.apache.velocity.tools.view.ViewContextTool"/>
<tool class="org.apache.velocity.tools.generic.ResourceTool"/>
<tool class="org.apache.velocity.tools.generic.DateTool"/>
<tool class="org.apache.velocity.tools.generic.MathTool"/>
<tool class="com.tdb.boss.tools.GlobalUtils"/>
<tool class="com.tdb.boss.tools.MenuUtils"/>
<tool class="com.tdb.boss.tools.SessionUtils"/>
<tool class="com.tdb.utils.CommonUtils"/>
</toolbox>
<toolbox scope="session" createSession="false">
<tool class="org.apache.velocity.tools.view.BrowserTool"/>
</toolbox>
</tools>