最近在整合velocity模闆引擎寫的前端頁面,遇到的一些小坑,記錄一波:
一、velocity是什麼?
官方網站:http://velocity.apache.org/
官方文檔:http://velocity.apache.org/engine/devel/user-guide.html#The_Mud_Store_Example
中文翻譯文檔:http://ifeve.com/apache-velocity-dev/
二、什麼是springMVC?
這個自己體會
三、正式開始整合
1、導入依賴
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.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>
2、在web.xml中配置springMVC
<!-- 配置DispatcherServlet -->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置springMVC需要加載的配置檔案-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
</servlet>
3、在spring-mvc.xml中配置velocity
<!--velocity-->
<bean id="velocityConfig"
class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<!--這裡配置vm檔案的位置-->
<property name="resourceLoaderPath" value="WEB-INF/templates"/>
<!--這裡配置velocity的其他屬性,比如輸入輸出字元-->
<property name="configLocation" value="classpath:velocity.properties"/>
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
<property name="cache" value="false"/>
<property name="prefix" value="" />
<property name="suffix" value=".vm"/>
</bean>
4、velocity.properties(這裡隻配置簡單的編碼,其他屬性再另行配置)
#這裡隻配置簡單的編碼
input.encoding=UTF-8
output.encoding=UTF-8
5、然後編寫個controller去調用模闆代碼吧,這裡就不給出來了。
注意:WEN-INF下面的檔案用戶端不能直接引用,需要經過服務端去分發跳轉。
四、velocity的簡單用法
前後端共享基于context容器,可以在java代碼中往裡面存值,然後在vm檔案中擷取,這是velocity的基本用法。
1、變量:使用$聲明變量,還可以用$取出velocityContext中的值。
##聲明變量
#set($name = "hello")
##引用變量
$name ##不推薦
${name} ##推薦
$!name ##不推薦
$!{name} ##推薦
注意:${var}擷取變量時,若變量為空則原樣輸出。
$!{var}擷取變量時,若變量為空則變成空白輸出。
2、循環
#foreach ( $item in $list )
---
$item ##每一項
$velocityCount ##目前次數
---
#end
3、條件控制
#if (condition)
---
#elseif(condition)
---
#else
---
#end
4、宏,可以了解為函數
##聲明宏
#macro(sayHello $name)
hello $name
#end
##使用宏
#sayHello("nick")
5、parse和include
#parse("header.vm") ##解析後輸出
#include("header.vm") ##原樣輸出,沒有經過velocity
#個人了解,若有錯誤的地方,請指教。