我有一个容易解决的问题,但我没有运气。
在我的servlet-servlet.xml文件中,我有以下bean(除了其他bean):
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> <context:component-scan base-package="com.servlet.web" />
我的测试控制器如下所示:
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<String, Object> map) { map.put("someMessage", "some string here"); return "test"; } }
我的jsp视图如下所示:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>servlet.com</title> </head> <body> ${someMessage} </body> </html>
因此,当我查看jsp时,我希望有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”。
${'test'}
您也可以尝试使用页面指令或如果要禁用EL的其他方式来启用它。
<%@ page isScriptingEnabled="true" isELIgnored="false" %> //of course it has to be FALSE
(对不起,我不记得这是否100%正确。它可能是’isELEnabled’)