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”.
thank
Thank you so much .
<%@ page isELIgnored=”false” %> use this tag in your jsp header
isELIgnored=”false”
include this in your jsp page.
wow, thank you so much, to many pages and only here I found the answer to my problem.
Thank you, I spent more than 5 hours to fix that. You saved me!!
Tried the solution ..but still not working.. 🙁
Nearly over 10 years, this solution is still so helpful!
nice thanks
Thanks for this answer.
It Works, Thanks
Thanks for sharing helpful information.. Saved my time…
Thank you very much! It saved my day
thank you so much!
Thank you, I spent weeks looking for a fix. You saved my day
Thanks!!!!
thanks alot mkyong, i almost gave up….u saved me…
Wow. same problem I faced. Every Spring MVC tutorial should include this.
Save me a day!!!
Thanks good job!
Thanks a lot for the great help. I wasted 1 day to search why ${} is not working
Thanks a lot man,this helped a lot.
Thanks!!!
Awesome! I was literally scratching my head for hours on why ${} is not working. Thanks a lot.
can we skip this JSTL part and use the controller passed variables directly like:
instead of ${message}
890870
this was just my problem, thank you
Great. Thank you so much
THANK YOU VERY MUCH!
@mkyong:
u are excellent;)
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.
Awesome! Solve the problem which confused me for a very long time. Thank you guy!
Thank you! I spent 3 hours searching for the problem in Spring config, but it was just web.xml 😀
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?!
I seldom write a comment but this time I really want to thank you for this solution
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…
Many thanks man, help me a lot!
I am using servlet 3.0 version but same problem here.
yeah… same for me.
but don’t know what to do..
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
mkyong,thank you very much!
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.
Thank you very much for documenting this solution nicely and clearly