springmvc 不解析EL表達式的解決辦法

這是一個spring mvc初學者可能會遇到的問題。代碼如下:

@Controller
@RequestMapping(value="/home")
public class HomeController {
    @RequestMapping(value = "/index")
    public ModelAndView Index(Model model)
    {
        model.addAttribute("msg", "hello,springmvc");
        return new ModelAndView("index");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;">
<title>Insert title here</title>
</head>
<body>
${msg}
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

運行結果不是我們希望的hello,springmvc,而是${msg}。 
導致這個結果的原因是JSP的版本問題,有可能你的項目目前的默認版本是1.2,這個版本默認是不開啓EL表達式的。

解決辦法有兩個,最直接的辦法是,在JSP頁面的上方加入一個標籤,開啓EL表達式

<%@ page isELIgnored="false" %>
  • 1

當然,如果每個頁面都要加這麼一行的話也很不爽,你可以將你的web.xml中的web-app節點加上下面的屬性

 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
      version="3.1">
      ......
  </web-app>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

就會使用JSP2.0,而JSP2.0默認是開啓EL表達式的。


我在寫這篇博客是也很糾結,解決問了以後,本來想重現一下錯誤,把代碼改回來,改回來後卻發現EL表達式也可以解析了。不得已,爲了搞明白到底是爲什麼,我又新建了一個項目,把主要的代碼拷貝過來,問題又重現了。我改完web.xml文件,並沒有馬上生效,而是等了幾秒種後我又刷新頁面才生效的。我又把web.xml中的代碼撤銷,重新部署,EL表達式也神奇般地解析了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章