[Spring MVC]学習ノート-フリーマーカーの使用
32731 ワード
この例を先に貼り付けてgithubに保存します.
https://github.com/lemonbar/spring-mvc-freemarker
SpingFrameworkの公式文書は、単にspring-mvcでfreemarkをどのように使うかを示しているが、これに対して提供される情報や例が少ないので、詳細な例を示している.
注:mavenをベースにした構築です.多くの説明はコードに加えられていますので、できるだけコードを貼ります.
Free Marker Site: http://freemarker.org/
1.フォルダ全体の構造
https://github.com/lemonbar/spring-mvc-freemarker
SpingFrameworkの公式文書は、単にspring-mvcでfreemarkをどのように使うかを示しているが、これに対して提供される情報や例が少ないので、詳細な例を示している.
注:mavenをベースにした構築です.多くの説明はコードに加えられていますので、できるだけコードを貼ります.
Free Marker Site: http://freemarker.org/
1.フォルダ全体の構造
src
main
java
com.lemon.spring.controller
GreetingController
webapp
WEB-INF
ftl
footer.ftl
header.ftl
login.ftl
welcome.ftl
root-context.xml
web.xml
pom.xml
2.pom.xml内容<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lemon.spring</groupId>
<artifactId>spring-mvc-freemarker</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>spring-mvc-freemarker Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<spring.framework.version>4.0.6.RELEASE</spring.framework.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.framework.version}</version>
</dependency>
<!--context-support should be included for freemarker bean definition.-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.framework.version}</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.20</version>
</dependency>
</dependencies>
<build>
<finalName>spring-mvc-freemarker</finalName>
</build>
</project>
3.web.xml<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/root-context.xml</param-value>
</context-param>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
4.root-context.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="com.lemon.spring"/>
<!-- -->
<mvc:annotation-driven enable-matrix-variables="true"/>
<!--<context:annotation-config/>-->
<!-- -->
<mvc:default-servlet-handler />
<!--freemarker config-->
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/ftl/"/>
</bean>
<!--
View resolvers can also be configured with ResourceBundles or XML files.
If you need different view resolving based on Locale, you have to use the resource bundle resolver.
-->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true"/>
<property name="prefix" value=""/>
<property name="suffix" value=".ftl"/>
</bean>
</beans>
5.GreeingController.java内容/*
* Copyright (c) 2014 General Electric Company. All rights reserved.
*
* The copyright to the computer software herein is the property of
* General Electric Company. The software may be used and/or copied only
* with the written permission of General Electric Company or in accordance
* with the terms and conditions stipulated in the agreement/contract
* under which the software has been supplied.
*/
package com.lemon.spring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import java.util.Arrays;
import java.util.List;
@Controller
public class GreetingController {
@RequestMapping(value = "/greeting/{user}", method = RequestMethod.GET)
public String greeting(@PathVariable String user, Model model) {
List<String> userList = Arrays.asList(user.split("-"));
//userList is the variable name, used in ftl file.
model.addAttribute("userList", userList);
return "welcome";
}
@RequestMapping(value = "/greeting", method = RequestMethod.POST)
public ModelAndView greeting(@RequestParam("user") String user) {
List<String> userList = Arrays.asList(user.split("-"));
ModelAndView result = new ModelAndView("welcome");
//userList is the variable name, used in ftl file.
result.addObject("userList", userList);
return result;
}
@RequestMapping("/login")
public String login() {
return "login";
}
}
6.welcome.ftl<html>
<head>
<title>Welcome!</title>
</head>
<body>
<#include "./header.ftl"/>
<table border="1">
<tr><th>Name</th><th>Price</th></tr>
<#list userList as user>
<tr><th>${user}</th><th>1.0</th></tr>
</#list>
</table>
<!--use include to include another ftl file content in this file.-->
<#include "./footer.ftl"/>
</body>
</html>
7.login.ftl<#import "/spring.ftl" as spring/>
<html>
<head>
<title>Please input your names, seperator with '-' char.</title>
</head>
<body>
<#include "./header.ftl"/>
<form action="greeting" method="POST">
Names:
<input type="text" name="user"/><br>
<input type="submit" value="submit"/>
</form>
<!--use include to include another ftl file content in this file.-->
<#include "./footer.ftl"/>
</body>
</html>
8.footer.ftl<hr>
<i>
Copyright (c) 2014 <a href="http://www.acmee.com">Acmee
Inc</a>,
<br>
All Rights Reserved.
</i>
9.header.ftl<h1>
This is header!
</h1>
<hr>