Spring の Freemarker で参照可能な変数について
Spring で freemarker を利用している場合、いくつかの変数がデフォルトで利用可能になっている。
protected SimpleHash buildTemplateModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) {
AllHttpScopesHashModel fmModel = new AllHttpScopesHashModel(getObjectWrapper(), getServletContext(), request);
fmModel.put(FreemarkerServlet.KEY_JSP_TAGLIBS, this.taglibFactory);
fmModel.put(FreemarkerServlet.KEY_APPLICATION, this.servletContextHashModel);
fmModel.put(FreemarkerServlet.KEY_SESSION, buildSessionModel(request, response));
fmModel.put(FreemarkerServlet.KEY_REQUEST, new HttpRequestHashModel(request, response, getObjectWrapper()));
fmModel.put(FreemarkerServlet.KEY_REQUEST_PARAMETERS, new HttpRequestParametersHashModel(request));
fmModel.putAll(model);
return fmModel;
}
これはつまり、Freemarker がデフォルトで提供している Servlet と同等の変数を埋めているということになる。 参考: http://freemarker.incubator.apache.org/docs/pgui_misc_servlet.html
- JspTaglibs
- Application
- Session
- Request
- RequestParameters
といった値が利用可能なので、場合によったら利用してもよい。(controller できちんと処理したほうがよいケースも多いので、乱用しないように気をつけるべし)
たとえば、Spring Security の login form などは以下のように書けばよいってなわけ。(というか spring security のサンプルコードが thymeleaf だったので悩んでて見つけた)
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
>
<head>
<title>Spring Security Example </title>
</head>
<body>
<#if RequestParameters.error??>
Invalid username and password.
</#if>
<#if RequestParameters.logout??>
You have been logged out.
</#if>
<form action="/login" method="post">
<div><label> User Name : <input type="text" name="username"/> </label></div>
<div><label> Password: <input type="password" name="password"/> </label></div>
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}">
<div><input type="submit" value="Sign In"/></div>
</form>
</body>
</html>