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

标签 java spring jsp spring-mvc

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

在我的 servlet-servlet.xml 文件中,我有以下 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" />

我的测试 Controller 看起来像这样:

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 View 如下所示:

<!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(此处为一些字符串)的值,但我只得到以下内容:

<!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>

当我启动日志记录时,我看到我的 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

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

最佳答案

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

如果应该禁用 EL,您也可以尝试使用页面指令或其他方式启用它。

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

(抱歉,我不记得这是否 100% 正确。可能是“isELEnabled”)

关于java - JSP 不在 Spring 中显示模型中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1529184/

相关文章:

java - 更改保留其 ID 的实体的类型

Java:同时移动对象

java - 从服务中获取错误的输出

java - Spring websockets、NettyTcpClient - 连接失败

java - Spring Rest Web 服务将文件作为资源返回

css - 使用 CSS 的列表样式图

java - JPA查询需要一些指导

java - 如何从方法中选择随机图像进行显示?

java - 我可以在多个环境中使用单个 war 文件吗?我是不是该?

java - JSP 在下拉框中使用数组列表的内容