問題

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”であるはずです。

リファレンス


  1. http://java.boot.by/wcd-guide/ch06s02.html

    [使用するJSPコードを書き込む

指令]