Velocity是一种针对Java应用研究的易用的模板语言。Velocity将Java代码从Web页面中分离出来,使用Web站点从长远看更容易维护,并且提供了一种可行的JavaServer Pages替代解决方案。 下面是参考 Spring in Action中的第九章之使用Velocity模板的一个Spring MVC 与 Velocity 整合的例子: 我们要显示一个课程列表,需要如下的 Java 类,在 mvc 包中分别建立:Course.java、Instructor.java、CourseService.java及ListCourse.java。其中Course是课程表信息;Instructor是任课教师的信息;CourseService用来列出课程信息,相当于DAO;ListCourse是实现了Controller的控制器,返回ModelAndView。下面分别列出代码:1、Course.java
package mvc;
import java.util.Date;
public class Course {
private String id;
private String name;
private Instructor instructor;
private Date startDate;
private Date endDate;
public Date getEndDate() {
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Instructor getInstructor() {
return instructor;
}
public void setInstructor(Instructor instructor) {
this.instructor = instructor;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
}
2、Instructor.java
package mvc; public class Instructor{ private String firstName; private String lastName; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } }
3、CourseService.java
package mvc;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class CourseService {
public List getAllCourses(){
List courseList = new ArrayList();
Course course = null;
Date date = null;
for(int i = 0; i < 8; i++){
course = new Course();
course.setId("XB2006112-"+i);
course.setName("Name-"+i);
date = new Date();
date.setYear(104-i);
course.setStartDate(date);
date = new Date();
date.setYear(105+i);
course.setEndDate(date);;
Instructor instructor = new Instructor();
instructor.setFirstName("firstName-"+i);
instructor.setLastName("lastName-"+i);
course.setInstructor(instructor);
courseList.add(course);
}
return courseList;
}
}
4、ListCourse.java
package mvc;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class ListCourse implements Controller{
private CourseService courseService;
public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
List<Course> courses = courseService.getAllCourses();
return new ModelAndView("courseList","courses",courses);
}
public void setCourseService(CourseService courseService){
this.courseService = courseService;
}
}
5、现在编写Velocity模板,在WebRoot/velocitly下面建立一个courseList.vm的文件,内容如下:
<html>
<head>
<title>Course List</title>
</head>
<body>
<h2>COURSE LIST</h2>
<table width="600" border="1" cellspacing="1" cellpadding="1">
<tr bgcolor="#999999">
<td>Course ID</td>
<td>Name</td>
<td>Instructor</td>
<td>Start</td>
<td>End</td>
</tr>
#foreach($course in $courses)
<tr>
<td>
<a href="dispalyCourse.htm?id=${course.id}">
${course.id}
</a>
</td>
<td>$course.name</td>
<td>$course.instructor.lastName</td>
<td>${course.startDate}</td>
<td>${course.endDate}</td>
</tr>
#end
</table>
</body>
</html>
6、配置web.xml及Spring配置文件training-servlet.xml:
web.xml: