您的位置:首页 > 编程语言 > Java开发

springboot+velocityLayout和velocity-tools

2016-01-31 17:03 447 查看
习惯每次做完一个项目把项目所得进行分享:

velocity作为模板语言已经存在很久,近期接触下来感觉用的还行,

 一:  先介绍下velocity-tools的好用之处,接下来再介绍如何整合。

整合了velocity-tools就不需要再导入什么标签了,这个velocity-tool中的工具有很多可以用于处理页面数据的东西。如格式化金额:$number.format("#0.00",$!{statistics.monthAmountStatistics}) 。格式化日期:$!date.format('yyyy-MM-dd',$!user.createdDate)。这里就简单说说用的到两个,其中还有以下工具:

1:  AlternatorTool:通过一个数组变量周期

配置属性:autlAlternate (),boolean 类型,默认是true

方法和属性:

A:#set( $alt = $alternator.auto(value1,value2,...) );创建一个自动的交替符

B:#set( $alt = $alternator.make(value1,value2,...) );创建一个默认的交替符

C:#set( $alt = $alternator.manual(value1,value2,...) );创建一个手动的交替符

2:ClassTool:工具,它的目的是要在模板中使用Java反射

3:ComparisonDateTool:工具格式,解析和比较日期

4:ContextTool:取当前页面的值

5:ConversionTool  允许数据之间的类型转换

6:displaytool工具提供了各种各样的方法来控制输出显示各种引用你的模板

7:escapetool工具提供一些逃离设施

8:FieldTool:工具允许方便地访问公共静态字段类,如字符串常量

9:LinkTool:工具使用超链接格式;这个工具有点不寻常的在每一个方法,参数将返回一个新实例的工具的一个副本的方法之一是呼吁,有额外的改变指定的方法调用

10:MathTool:工具提供数学函数

11:NumberTool:工具用于格式化数字

12:RenderTool:工具,使方法来评估给定的字符串作为VTL(Velocity模板语言)使用一个预先配置的上下文或您直接提供

13:ResourceTool:工具访问resourcebundle的和格式化消息,大多数方法都返回一个新对象,大多与原始相同的方法,允许您建立参数优雅和简单,而不是试图记住如何使用方法与许多参数,必须在一个特定的顺序:所以,你可以访问资源的关键“你好。谁”“otherStuff”包与一个消息这样的论点:美元text.hello.whoever.bundle(otherStuff).insert(世界)而不是这样的:text.get美元(“你好。谁”、“otherStuff“零美元,”世界”)

14:SortTool:排序工具集合

15:XmlTool:工具用于阅读/导航XML文件;这在幕后使用dom4j提供完整的XPath支持遍历XML文件

 16:BrowserTool:浏览器嗅探工具,它定义了属性用于测试客户端浏览器、操作系统、设备、语言…除了浏览器版本的相关属性和语言,所有属性都是布尔值。

 17:CookieTool:工具用于读取和设置cookie

 18:ImportTool:通用text-importing视图的工具模板

 19:IncludeTool:工具允许透明的内容协商的方式模仿Apache httpd MultiViews方法;读取默认语言的ViewToolContext org.apache.velocity.tools.view.i18n。defaultLanguage;请注意,它并不实际的# include或#为你解析,但仅仅是帮助包括内容协商

 20:LinkTool:工具使用超链接格式;这个工具有点不寻常的在每一个方法,参数将返回一个新实例的工具的一个副本的方法之一是呼吁,有额外的改变指定的方法调用,允许链接调用像href = " $ link.relative(foobar.html).param .anchor(“id”、“25”)(“第四单元”)”(这将产生href = " foobar.html ? id = 25 #第四单元”)

 21:PagerTool:工具做request-based分页列表中的项目

 22:ParameterTool:工具用来解析请求参数

 23:ViewContextTool:扩展的通用ContextTool包括从HttpServletRequest键和值,HttpSession和ServletContext属性

 //上来内容来源对下面链接的翻译,有的地方翻译可能不正确, 想用什么工具的就看自己项目的需求,然后自己看着办。
https://velocity.apache.org/tools/releases/2.0/summary.html#ContextTool
toolbox.xml:

<?xml version="1.0" encoding="UTF-8"?>

<tools>

  <data type="string" key="version" value="2.0"/>

  <!-- 在这里配置 类,在项目启动的时候就自动把类实例化好了,在页面就可以用了,例子:下面  ${test.Method()}-->

  <toolbox scope="request">

  <!-- currentProject util start -->
<!-- <tool key="test" class="com.gzrj.services.Test"></tool>  -->
<!-- currentProject util end -->

    <!-- 下面的这些配置都是velocity的配置,可以不用管,也不能更改 -->

    <!-- velocity util start -->
<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.PagerTool"/>

    <tool class="org.apache.velocity.tools.view.ParameterTool"/>

    <tool class="org.apache.velocity.tools.view.ViewContextTool"/>

    <tool class="org.apache.velocity.tools.generic.ContextTool"/>

    <tool class="org.apache.velocity.tools.generic.LoopTool"/>

    <tool class="org.apache.velocity.tools.generic.RenderTool"/>
<!-- velocity util end -->

  </toolbox>

  

  <toolbox scope="session" createSession="false">

      <tool class="org.apache.velocity.tools.view.BrowserTool"/>

  </toolbox>

  

  <toolbox scope="application">

      <tool class="org.apache.velocity.tools.generic.AlternatorTool"/>

      <tool class="org.apache.velocity.tools.generic.ClassTool"/>

      <tool class="org.apache.velocity.tools.generic.ComparisonDateTool"/>

      <tool class="org.apache.velocity.tools.generic.ConversionTool"/>

      <tool class="org.apache.velocity.tools.generic.DisplayTool"/>

      <tool class="org.apache.velocity.tools.generic.EscapeTool"/>

      <tool class="org.apache.velocity.tools.generic.FieldTool"/>

      <tool class="org.apache.velocity.tools.generic.MathTool"/>

      <tool class="org.apache.velocity.tools.generic.NumberTool"/>

      <tool class="org.apache.velocity.tools.generic.ResourceTool"/>

      <tool class="org.apache.velocity.tools.generic.SortTool"/>

      <tool class="org.apache.velocity.tools.generic.XmlTool"/>

      <tool class="org.apache.velocity.tools.generic.ListTool"/>

      <tool class="org.apache.velocity.tools.generic.DateTool"/>

      

  </toolbox>

</tools>

二:如何使springboot和velocity-tools进行整合,以及需要配置点什么东西。

配置属性如下:请特别注意下配置的velocity-tools的工具的路径

配置好了这些,接下来需要要让springboot加载velocity-tooles

添加以下两个类:

类1:

import org.springframework.boot.autoconfigure.velocity.VelocityProperties;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.view.velocity.VelocityViewResolver;

/**

 * 

 * @ClassName: VelocityConfig

 * @Description:提供一个velocity的配置bean

 * @author lilerong

 * @date 2016年1月23日 下午1:32:32

 * 

 */

@Configuration

public class VelocityConfig {

@Bean
// 现在这个class不再是layout的,所以要把对应的 ViewResolver改成对应的,由于没有
// toolboxviewresolver,就用父类 veclotiyviewresoler
public VelocityViewResolver velocityViewResolver(VelocityProperties properties) {
VelocityViewResolver viewResolver = new VelocityViewResolver();
viewResolver.setViewClass(VelocityLayoutToolboxView.class);
properties.applyToViewResolver(viewResolver);// 设置默认属性,比如前缀和后缀
return viewResolver;
}

}

类2:

/**

 * 

 * @ClassName: VelocityLayoutToolboxView

 * @Description: 使springboot支持velocityTool工具的使用。

 * @author lilerong

 * @date 2016年1月23日 上午11:00:08

 * 

 */

public class VelocityLayoutToolboxView extends VelocityToolboxView

{
private VelocityLayoutToolboxView() {
}

/**
* 加载velocitytool。能加载上特别的不容易
*/
@Override
protected Context createVelocityContext(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
ViewToolContext ctx = new ViewToolContext(this.getVelocityEngine(), request, response, this.getServletContext());
if (this.getToolboxConfigLocation() != null) {
XmlFactoryConfiguration factory = new XmlFactoryConfiguration();
factory.read(ResourceUtils.getURL(this.getToolboxConfigLocation()).openStream());// 这个地方和配置中心的缺一不可、
ToolboxFactory toolboxFactory = factory.createFactory();
toolboxFactory.configure(factory);
Collection<ToolboxConfiguration> toolboxes = factory.getToolboxes();
for (ToolboxConfiguration tc : toolboxes) {
ctx.addToolbox(toolboxFactory.createToolbox(tc.getScope()));// 这样操作后就可以用工具里面的东西了。
}

}
if (model != null && !model.isEmpty()) {
ctx.putAll(model);
}

return ctx;
}

这样配置弄完后,页面就可以使用工具类了。

三:大家肯定会好奇问,为什么没看到我把springboot和velocitylayout进行整合,其实我想说,一开始我是整合了的,但是整合后发现一个问题,那就是他跳转是刷新整个页面,如果你项目是上,左,中的布局,你只想刷新中间的布局,那么velocitylayout是无法实现的。所以我整合好后还是弃用了,但是如果不介意用这种刷新所有的方式,那请继续往下看。

把上面的 extends VelocityToolboxView 改为 extends VelocityToolboxView。然后VelocityConfig.java中的返回值同样作下修改。那么这个就是velocitylayout的加载方式。

二和三我说的都是springboot加载的后台处理,下面说下前台我们该怎么做。

四:在resources/templates目录下建一个layout的文件夹,然后新增以下文件,

layout.vm   这个我只提取了body的,其实这个相当于index页面,需要,html,head,body,已经全局的样式什么的都要在这个地方进行加载。

<body>
#parse('/layout/header.vm' )
<!--主要内容-->
<div class="yl-main width990" style="position: relative; top: -50px;">
<!-- 左侧栏 -->
#parse('/layout/left.vm')
<!--主内容区-->
##$screen_content
<span id="content"></span>
</div>
<!--底部版权-->
#parse( '/layout/footer.vm' )

 
</body>

left.vm:

<!--左侧边栏-->

<script type="text/javascript"> 

function commonUrl(url){
//给主要区域加载内容
$('#content').load('$ctx'+url);

}

     

</script>
<div class="yl-sidebar width190" id="yl-sidebar">
<ul>
<li>
<a href="javascript:void(0);">
<span class="yl-span1" onclick="commonUrl('/accountCenter/')"><i></i> 账户中心</span>
</a>
</li>
 
</ul>

</div> 

其他两个vm没什么好介绍的,都的给定一些写死的值。主要是layout页面和left页面比较重要。

上面已经全部介绍完毕,如果有不懂的可以给我留言
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息