ModelAndView’s model value is not displayed in JSP via EL

Problem

In Spring MVC development, developer try to set a value into a model, and display the value in JSP via EL, e.g ${msg}, but it just outputs the result as it is – ${msg}, not the “value” stored in the model. The EL is just not working in JSP, why?

Spring’s Controller


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 page


<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>
             ${msg}
</body>
</html>

Solution

This is the common asked question in the most Spring MVC hello world example. Actually it’s caused by the old JSP 1.2 descriptor.

1. JSP 1.2

If you are using the old JSP 1.2 descriptor, defined by DTD ,for example
web.xml


<!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>

The EL is disabled or ignored by default, you have to enable it manually, so that it will outputs the value store in the “msg” model.


<%@ 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

If you are using the standard JSP 2.0 descriptor, defined by w3c schema ,for example
web.xml


<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>

The EL is enabled by default, and you should see the value stored in the “msg” model, which is “hello world”.

Reference

  1. Write JSP code that uses the directives

43 comments on “ModelAndView’s model value is not displayed in JSP via EL

  1. <%@ page isELIgnored=”false” %>  use this tag in your jsp header

    Reply
  2. isELIgnored=”false”
    include this in your jsp page.

    Reply
  3. wow, thank you so much, to many pages and only here I found the answer to my problem.

    Reply
  4. Thank you, I spent more than 5 hours to fix that. You saved me!!

    Reply
  5. Tried the solution ..but still not working.. 🙁

    Reply
  6. Nearly over 10 years, this solution is still so helpful!

    Reply
  7. Thanks for sharing helpful information.. Saved my time…

    Reply
  8. Wow. same problem I faced. Every Spring MVC tutorial should include this.

    Reply
  9. Thanks a lot for the great help. I wasted 1 day to search why ${} is not working

    Reply
  10. Awesome! I was literally scratching my head for hours on why ${} is not working. Thanks a lot.

    Reply
  11. can we skip this JSTL part and use the controller passed variables directly like:

    instead of ${message}

    Reply
  12. You are a life saver. I just spent 2 frustrating hours trying to figure out why? Being a beginner does not help. You just made me pain free. Thanks.

    Reply
  13. Awesome! Solve the problem which confused me for a very long time. Thank you guy!

    Reply
  14. Thank you! I spent 3 hours searching for the problem in Spring config, but it was just web.xml 😀

    Reply
  15. Hi do you know if its possible to add an object via spring mvc such as…

    model.addObject(“msg”, “hello world”);

    and then access the value directly in javascript without writing out to the JSP?

    $(document).ready(function() {
    alert(${msg}) ;
    }

    something like that?!

    Reply
  16. I seldom write a comment but this time I really want to thank you for this solution

    Reply
  17. Thanks for the hint, I was close to getting crazy! We had a project running on Tomcat without any attributes in web-app at all (don’t ask how *that* worked – I have no clue), and I couldn’t get it running on Jetty. Of course after adding the attributes it worked like a charm…

    Reply
  18. Thanks man!
    I got something similar. In the web.xml I changed the version=”2.4″ to Version=”2.5″ when I upgraded Tomcat and all my jsps stopped getting the Model values. The problem was the V in upper case in the version attribute. I was totally lost because I thought it was because of the new tomcat version….your post hinted me that the problem was in the web.xml header. Thanks again

    Reply
  19. Thanks so much for this article, I was googling to resolve this issue but no one has mentioned the resolution anywhere. This is very simple thing but is very useful.

    Reply
  20. Thank you very much for documenting this solution nicely and clearly

    Reply

Leave a Comment

Your email address will not be published. Required fields are marked *