ModelAndViewのモデル値はELを介してJSPに表示されません
問題
Spring MVC開発では、開発者はモデルに値を設定しようとし、ELで値を表示します(例:
$ \ {msg}
)。
$ \ {msg}
、モデルに格納されている “値”ではありません。
ELがJSPで動作していないのはなぜですか?
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractController; public class ABCController extends AbstractController{ @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView model = new ModelAndView("HelloWorldPage"); model.addObject("msg", "hello world"); return model; } }
-
JSPページ**
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <body> ${msg} </body> </html>
解決策
これは、ほとんどのSpring MVC hello worldの例でよくある質問です。実際には、古いJSP 1.2記述子が原因です。
1. JSP 1.2
-
web.xml
のように
DTD
で定義された
古いJSP 1.2記述子を使用している場合は、
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app__2__3.dtd" > <web-app>//... </web-app>
ELはデフォルトで無効になっているか無視されていますので、手動で有効にして、 “msg”モデルの値ストアを出力する必要があります。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <%@ page isELIgnored="false" %> </head> <body> ${msg} </body> </html>
2. JSP 2.0
-
web.xml
のようにw3c schema
で定義された** 標準JSP 2.0記述子を使用している場合、
<web-app id="WebApp__ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app__2__4.xsd">//... </web-app>
ELはデフォルトで有効になっており、 “msg”モデルに格納されている値は “hello world”であるはずです。