복붙노트

[SPRING] Spring에서 모델의 객체를 표시하지 않는 JSP

SPRING

Spring에서 모델의 객체를 표시하지 않는 JSP

나는 해결해야 할 쉬운 문제가 있어야하지만, 나는 운이 없다.

내 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 (일부 문자열) 값을 기대하지만 다음과 같은 결과 만 얻습니다.

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

분명히, 내보기가 올바르게 매핑되어 있지만보기에서 요청에 추가 된 모델 개체에 액세스 할 수없는 것 같습니다. 나는 과거에 여러 번 Spring MVC를 사용하여 이러한 유형의 작업을 수행 했었지만 여기서 확실한 것을 놓치고 있어야합니다. 어떤 아이디어? 감사.

해결법

  1. ==============================

    1.JSP에서 EL 평가가 사용 가능합니까? 가끔 문제가 생겨서 어떻게 든 돌아 섰습니다. $ { 'test'}와 같은 간단한 표현식을 평가하고 'test'가 표시되는지 확인하십시오.

    JSP에서 EL 평가가 사용 가능합니까? 가끔 문제가 생겨서 어떻게 든 돌아 섰습니다. $ { 'test'}와 같은 간단한 표현식을 평가하고 'test'가 표시되는지 확인하십시오.

    또한 EL을 비활성화해야한다면 페이지 지시문이나 다른 것을 사용하여 시도해 볼 수 있습니다.

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

    (죄송 합니다만,이 100 %가 맞는지 기억이 나지 않습니다. 'isELEnabled'일 수 있습니다.)

  2. ==============================

    2.동일한 문제가 발생하여 2 개의 비슷한 응용 프로그램 (EL이 잘 작동하고 다른 응용 프로그램이없는 응용 프로그램)을 비교 한 결과, 내 tomcat 7의 문제점은 응용 프로그램의 web.xml에 지정된 webapp 버전에 달려 있다는 것을 알게되었습니다.

    동일한 문제가 발생하여 2 개의 비슷한 응용 프로그램 (EL이 잘 작동하고 다른 응용 프로그램이없는 응용 프로그램)을 비교 한 결과, 내 tomcat 7의 문제점은 응용 프로그램의 web.xml에 지정된 webapp 버전에 달려 있다는 것을 알게되었습니다.

    Web App 2.3을 사용하는 동일한 JSP는 $ {some Message}를 표시합니다. (OF, 이것은 maven archetype을 사용하여 얻은 것입니다 : darchetypeArtifactId = maven-archetype-webapp로 생성).

    <!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 2.4를 사용하는 동일한 JSP가 모델 객체를 올바르게 표시합니다.

    <?xml version="1.0" encoding="UTF-8"?>
    <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">
    ...
    

    도움이되기를 바랍니다!

  3. ==============================

    3.Spring MVC만큼 많은 주석 설정을 사용하지 않았기 때문에 설정에 따라 자동으로 수행되는 모든 작업을 확신 할 수 없습니다. 내 생각은 이것입니다 : 메서드 매개 변수는 ModelMap 객체 여야합니까? 이전에 본 예에서는 모두 ModelMap을 매개 변수 유형으로 사용했습니다. 이 페이지의 섹션 13.11.3은 http://static.springsource.org/spring/docs/2.5.6/reference/mvc.html 중 하나입니다.

    Spring MVC만큼 많은 주석 설정을 사용하지 않았기 때문에 설정에 따라 자동으로 수행되는 모든 작업을 확신 할 수 없습니다. 내 생각은 이것입니다 : 메서드 매개 변수는 ModelMap 객체 여야합니까? 이전에 본 예에서는 모두 ModelMap을 매개 변수 유형으로 사용했습니다. 이 페이지의 섹션 13.11.3은 http://static.springsource.org/spring/docs/2.5.6/reference/mvc.html 중 하나입니다.

    앞서 말했듯이이 유형의 자동 구성을 사용하지 않았습니다. 수동으로 약간 더 수행하고 AbstractController 또는 SimpleFormController와 같은 컨트롤러에서 컨트롤러를 확장합니다.

  4. from https://stackoverflow.com/questions/1529184/jsps-not-displaying-objects-from-model-in-spring by cc-by-sa and MIT license