2009-10-07 52 views
8

Çözmem gereken kolay bir sorun olmalı, ancak şansım yok. Benim servlet-servlet.xml dosyasındaJSP'ler ilkbaharda modelden nesneyi görüntülemiyor

, aşağıdaki fasulye (diğerlerinin yanı sıra) vardır:

<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" /> 

Testim kontrolör şöyle görünür:

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"; 
    } 

} 

Benim jsp görünüm görünüyor böyle: Ben jsp görüntülediğinizde

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

, ben someMessage değerini (burada biraz dize) bekliyoruz, ama sadece ben istiyorum olsun şu: '

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 '[email protected]' 
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 

benim bakış doğru şekilde haritaya, Açıkçası, ama elimden: Ben günlüğü krank zaman

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

, benim someMessage nesne modeli olmak yerdir görüyoruz Görünümdeki isteğe eklenen model nesnelerine erişilemiyor. Geçmişte birçok kez Spring MVC ile bu tür bir şey yaptım, ama burada bariz bir şey eksik olmalı. Herhangi bir fikir? Teşekkürler.

+0

Web.xml'inizi sağlayabilir misiniz? ve tüm servlet-servlet.xml ?? Denetleyicinizi tarafımdan aynı görünümle test ettim ve düzgün şekilde oluşturuldu. – rochb

cevap

13

JSP'nizde EL değerlendirmesinin etkin olduğundan emin misiniz? Bazen sorun yaşadım, bir şekilde döndü. ${'test'} gibi basit bir ifadeyi değerlendirmeye çalışın ve 'test' görünüp görünmediğine bakın.

Ayrıca, EL yönergeleri devre dışı bırakılmışsa, sayfa yönergeleri veya başka bir şeyle etkinleştirmeyi deneyebilirsiniz.

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

(O 'isELEnabled' olabilir bu% 100 doğru eğer. Üzgünüm, hatırlayamıyorum)

Ben aynı sorun koştu
+2

Güzel! Jsp sayfamın başına <% @ page isELIgnored = "false"%> eklemek benim sorunumu çözdü. Elimi devre dışı bıraktığından emin değilim. Oh, isScriptingEnabled özelliği dahil jsp'yi kırıyor gibi görünüyor, bu yüzden onu kaldırdım. IsScriptingEnabled özelliğinin JSP 2.0 öncesi geçerli olduğu görünüyor? Özet olarak, jsp'ye <% @ page isELIgnored = "false"%> eklenmesi sorunu çözdü. Teşekkürler Moxn – labratmatt

+1

Rica ederim. Bunu web.xml dosyasında yapılandırmanın bir yolu olduğundan eminim. [1] [1] 'e bağlı olarak, tüm JSP'leriniz için EL'yi etkinleştirmek üzere web.xml'inize konfigürasyon ekleyebilirsiniz. [1] http://www.theserverside.com/discussions/thread.tss?thread_id=44097 – moxn

1

Spring MVC ile yaptığınız kadar çok açıklamalı yapılandırma kullanmıyorum, bu nedenle kurulumunuzda otomatik olarak yapılan tüm şeylerden emin değilim. Tek düşüncem şudur: yöntem parametresi bir ModelMap nesnesi mi olmalı? Daha önce gördüğüm örneklerin hepsi, ModelMap'ı parametre tipi olarak kullanmıştır. Bu sayfanın 13.11.3 numaralı bölümü bunlardan biridir: http://static.springsource.org/spring/docs/2.5.6/reference/mvc.html.

Daha önce de söylediğim gibi, bu otomatik yapılandırma türünü daha önce kullanmadım - biraz daha el ile yapıyorum ve denetleyicileri bir AbstractController veya SimpleFormController gibi bir şeyden genişletiyorum.

+0

Zaman için teşekkürler. ModelMap kullanmayı denedim ve aynı sonucu aldım. – labratmatt

4

ve EL çalışma ile 2 benzeyen uygulamaları (bir karşılaştırdıktan sonra iyi ve diğer değil), benim tomcat 7 sorun benim uygulama web.xml belirtilen webapp sürümüne bağlı olduğunu fark etti.

Web Uygulaması 2.3 kullanılarak aynı jsp, $ {someMessage} öğesini görüntüler. (BTW, maven arketipini kullanarak elde ettiğin şey buydu: archetypeArtifactId = maven-archetype-webapp ile oluştur). o yardımcı olduğunu

<?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"> 
... 

Umut: Web Uygulaması'na 2.4 görüntüler düzgün modeli nesne kullanarak

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

aynı jsp!