JSP不在Spring中显示模型中的对象

我有什么应该是一个容易解决的问题,但我没有运气。

在我的servlet-servlet.xml文件中,我有以下bean(除了其他bean):

      

我的测试控制器看起来像这样:

 package com.servlet.web; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class TestController { protected final Log log = LogFactory.getLog(getClass()); @RequestMapping("/test") public String methodName(Map map) { map.put("someMessage", "some string here"); return "test"; } } 

我的jsp视图如下所示:

     servlet.com   ${someMessage}   

所以,当我查看jsp时,我会期待someMessage的值(这里有一些字符串),但我只得到以下内容:

     servlet.com   ${someMessage}   

当我开始记录日志时,我看到我的someMessage对象正在模型中:

 22:21:17,425 DEBUG DispatcherServlet:852 - DispatcherServlet with name 'servlet' determining Last-Modified value for [/servlet/access/test] 22:21:17,426 DEBUG DefaultAnnotationHandlerMapping:183 - Mapping [/test] to handler 'com.servlet.web.TestController@762fef' 22:21:17,426 DEBUG DispatcherServlet:868 - Last-Modified value for [/servlet/access/test] is: -1 22:21:17,426 DEBUG DispatcherServlet:700 - DispatcherServlet with name 'servlet' processing GET request for [/servlet/access/test] 22:21:17,427 DEBUG HandlerMethodInvoker:158 - Invoking request handler method: public java.lang.String com.servlet.web.TestController.methodName(java.util.Map) 22:21:17,427 DEBUG DispatcherServlet:1070 - Rendering view [org.springframework.web.servlet.view.JstlView: name 'test'; URL [/WEB-INF/jsp/test.jsp]] in DispatcherServlet with name 'servlet' 22:21:17,427 DEBUG JstlView:328 - Added model object 'someMessage' of type [java.lang.String] to request in view with name 'test' 22:21:17,428 DEBUG JstlView:237 - Forwarding to resource [/WEB-INF/jsp/test.jsp] in InternalResourceView 'test' 22:21:17,429 DEBUG DispatcherServlet:666 - Successfully completed request 

显然,我的视图已正确映射,但我似乎无法访问视图中添加到请求的模型对象。 我过去曾多次使用Spring MVC做过这种事情,但我必须在这里遗漏一些明显的东西。 有任何想法吗? 谢谢。

您确定在JSP中启用了对EL的评估吗? 我有时遇到了问题,它以某种方式转变了。 尝试评估一个简单的表达式,如${'test'} ,看看是否出现’test’。

如果应禁用EL,您还可以尝试使用页面指令或其他内容启用它。

 <%@ page isScriptingEnabled="true" isELIgnored="false" %> //of course it has to be FALSE 

(对不起,我不记得这100%是否正确。可能是’isELEnabled’)

我遇到了同样的问题,在比较了两个类似的应用程序(一个EL工作正常,另一个没有)之后,注意到我的tomcat 7上的问题取决于应用程序的web.xml中指定的webapp版本。

使用Web App 2.3的相同jsp显示$ {someMessage}。 (顺便说一句,这是你使用maven archetype获得的:使用archetypeArtifactId = maven-archetype-webapp生成)。

   ... 

使用Web App 2.4的相同jsp正确显示模型对象:

   ... 

希望它有所帮助!

我没有使用与Spring MVC一样多的注释配置,因此我不确定所有使用您的设置自动完成的事情。 我唯一想到的是:方法参数应该是ModelMap对象吗? 我之前见过的例子都使用ModelMap作为参数类型。 本页第13.11.3节是其中之一: http ://static.springsource.org/spring/docs/2.5.6/reference/mvc.html。

就像我说的那样,之前我没有使用过这种类型的自动配置 – 我手动稍微做一些,并从AbstractController或SimpleFormController扩展我的控制器。