1. 程式人生 > >SpringMVC 整合velocity以及介紹velocity的基本使用語法

SpringMVC 整合velocity以及介紹velocity的基本使用語法

Velocity模板(VM)語言介紹以及與MVC整合

Velocity是一個基於java的模板引擎(template engine)。它允許任何人僅僅簡單的使用模板語言(template language)來引用由java程式碼定義的物件。 當Velocity應用於web開發時,介面設計人員可以和java程式開發人員同步開發一個遵循MVC架構的web站點,也就是說,頁面設計人 員可以只關注頁面的顯示效果,而由java程式開發人員關注業務邏輯編碼。Velocity將java程式碼從web頁面中分離出來,這樣為web站點的長 期維護提供了便利,同時也為我們在JSP和PHP之外又提供了一種可選的方案。

Velocity現在應用非常廣泛,現在嘗試將SpringMVC專案與Velocity整合。

1.整合過程

採用以前整合的[SpringMVC專案]。 主要涉及改變的檔案: pom.xml(引入velocity的jar包) spring-mvc.xml(檢視配置,配置velocity)

velocity.properties(velocity配置檔案)

下面簡要描述一下在spring mvc中配置velocity的步驟: 

1、引入velocity所需要的包(mvc的基礎上做的新增在這裡就省略mvc所匯入的jar)

<!-- Velocity模板 -->  
  <dependency>  
            <groupId>org.apache.velocity</groupId>  
            <artifactId>velocity</artifactId>  
            <version>1.5</version>  
        </dependency>  
        <dependency>  
            <groupId>org.apache.velocity</groupId>  
            <artifactId>velocity-tools</artifactId>  
            <version>2.0</version>  
        </dependency> 

2.新增配置資訊(spring-mvc.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">




    <!--包掃描-->
    <context:component-scan base-package="controller"/>
       


    <!--新的名稱空間 mvc
        自動註冊處理器介面卡  和  處理器對映器   處理一些響應相關的操作
        不僅代替處理器對映器還代替處理器介面卡,還可以處理響應相關的操作
        @ResponseBody就是響應到前臺的就要配置在這個名稱空間裡
    -->
    <mvc:annotation-driven/>
           
    <!--建立處理器對映器
    <bean  class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
    建立處理器介面卡
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
      -->


  <!--  檢視解析器
        根據controller方法的返回值解析結果為  字首+ return返回值+字尾
    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
 -->
<!-- 檢視模式配置,velocity配置檔案-->
<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">  
    <property name="resourceLoaderPath" value="/WEB-INF/views" />  
    <property name="configLocation" value="classpath:velocity.properties" />  
</bean>  


<!-- 配置字尾 -->
<bean id="velocityViewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">  
    <property name="suffix" value=".vm" />  
    <property name="contentType"><value>text/html;charset=UTF-8</value></property>
</bean>
 


</beans>

3.velocity.properties配置檔案

#encoding  設定編碼格式
input.encoding=UTF-8
output.encoding=UTF-8
  
#autoreload when vm changed  
file.resource.loader.cache=false
file.resource.loader.modificationCheckInterval=2
velocimacro.library.autoreload=false  

4.配置完後書寫TestController

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/hello")
public class HelloController {
	private static Logger logger = Logger.getLogger(HelloController.class);
	@RequestMapping("/showAllUser")
	public String showAllUser(HttpServletRequest request,Model model){
		//volicaty放入集合
		List<User> list = new ArrayList<User>();
		User user = new User();
		user.setAge(1);
		user.setDate(new Date());
		user.setId("1");
		user.setName("張三");
		User user2 = new User();
		user2.setAge(1);
		user2.setDate(new Date());
		user2.setId("s");
		user2.setName("李四");
		list.add(user);
		list.add(user2);
		logger.info("userList's size==============" +list.size());
		model.addAttribute("userList",list);
		//放入單個數據
		model.addAttribute("user","測試資料");
		return "showAllUser";
	}
}

5.showAllUser.vm模板(放置在WEB-INFO下面新增views資料夾)

    <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>show all users</title>
</head>
<body>
	<h2>單個名字:$user</h2>
	<hr/>
    <table >遍歷集合所得到的資料
        #foreach($user in $userList)
            <tr >
                <td >$user.name</td>
                <td >$user.age</td>
            </tr>
        #end
    </table>
    <hr/>
#set($directoryRoot = "www" )
#set($templateName = "index.vm" )
#set($template = "$directoryRoot/$templateName" )
最終結果:$template
</body>
</html>  

6.訪問結果展示:

2. Velocity基本使用語法

1.展示單條資料

	<!--展示單條資料這兩種方式都可以推薦第一種-->
		<h2>1.單個名字:$user</h2>
		<hr/>
		<h2>2.單個名字:${user}</h2>
	<hr/>

   2.展示集合資料

		<!--展示集合資料-->
    <table >
        #foreach($user in $userList)
            <tr >
                <td >$user.name</td>
                <td >$user.age</td>
            </tr>
        #end
    </table>

3.在模版中給變數賦值

      <!--前面兩個都是給變數賦值,展示的結果為:www/index.vm-->
		#set($directoryRoot = "www" )
		#set($templateName = "index.vm" )
		#set($template = "$directoryRoot/$templateName" )
		結果:$template

4.條件語句使用語法

<!-- 條件語句使用語法-->
		#if (${a}>18) 小學
		#elseif (${a}<15)中學
		#else大學
		#end

5.單行以及多行註釋

	<!-- 單行註釋-->	
	 	 ## This is a single line comment.
	 	 
	 	 
	<!-- 多行註釋-->	
		 #*
		   Thus begins a multi-line comment. Online visitors won’t
		   see this text because the Velocity Templating Engine will
		   ignore it.
	  	*#

6.set語法

#set可以建立一個Velocity的變數,一般用於向一個變數或屬性賦值,下面的第一個例子,大概和java中的String name=user.getName();是一個意思.
在Velocity語法樹中,#set表示式對應的是一個ASTSetDirective類,"="兩邊的表示式值,分別對應該類的兩個子節點,LHS和RHS.
#set($user.name="zhangsan")   可以理解為     user.setName("zhangsan")
#set(name=user.name)         可以理解為     user.getName();
像上述例子中的第一個:不僅可以表示 user.setName("zhangsan"),還可以表示user.setname("zhangsan"),或者user.put("name","zhangsan"),
這是動態語言的特點,不想java語法那樣嚴格的定義.
注意:#set表示式,結尾不需要#end跟隨,其他表示式基本都需要加#end.

--------------------- 本文來自 weixin_40470497 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/weixin_40470497/article/details/79951169?utm_source=copy