Main Tutorials

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

About Author

author image
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter. If you like my tutorials, consider make a donation to these charities.

Comments

Subscribe
Notify of
43 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
vineet tyagi
11 years ago

I am using servlet 3.0 version but same problem here.

SeungJin
5 years ago
Reply to  vineet tyagi

yeah… same for me.

but don’t know what to do..

S D
4 years ago

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

Tanmay Shah
6 years ago

Thanks for sharing helpful information.. Saved my time…

admin
2 years ago

thank

Dalbir
3 years ago

Thank you so much .

money
3 years ago

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

Satish
4 years ago

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

Lilly
4 years ago

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

Ciro Moraes
4 years ago

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

Mike Guan
5 years ago

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

wanda priatna
5 years ago

nice thanks

Nishant Kadivar
5 years ago

Thanks for this answer.

rahul
5 years ago

It Works, Thanks

Quoc
6 years ago

Thank you very much! It saved my day

ulusalhafsa
6 years ago

thank you so much!

henry
6 years ago

Thank you, I spent weeks looking for a fix. You saved my day

cristian
6 years ago

Thanks!!!!

zeeshan
6 years ago

thanks alot mkyong, i almost gave up….u saved me…

Kaushik Lele
6 years ago

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

Chaojun Zhong
7 years ago

Save me a day!!!

Prashant
7 years ago

Thanks good job!

Rakesh Thakur
7 years ago

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

mabrouk monsif
7 years ago

Thanks a lot man,this helped a lot.

Robert Rusu
8 years ago

Thanks!!!

Manik
8 years ago

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

Ashish Aggarwal
8 years ago

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

instead of ${message}

dsfgsdeftg435435643
9 years ago

890870

fabian
9 years ago

this was just my problem, thank you

NicholasLe
9 years ago

Great. Thank you so much

Vadim
9 years ago

THANK YOU VERY MUCH!