2009-10-07 8 views
8

J'ai ce qui devrait être une question facile à résoudre, mais je n'ai pas de chance.JSP ne pas afficher les objets du modèle au printemps

Dans mon fichier servlet-servlet.xml, je les haricots suivants (en plus d'autres):

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

Mon contrôleur de test ressemble à ceci:

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

} 

mon apparence vue jsp comme ceci:

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

Alors, quand je vois le jsp, j'attendre la valeur de someMessage (une chaîne de caractères ici), mais je ne obtenir les éléments suivants:

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

Quand je manivelle jusqu'à l'enregistrement, je vois que mon objet someMessage est d'être dans le modèle:

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 

De toute évidence, mon point de vue est mis en correspondance correctement, mais je peux » t semble accéder aux objets de modèle ajoutés à la requête dans la vue. J'ai fait ce genre de chose avec Spring MVC plusieurs fois dans le passé, mais il me manque quelque chose d'évident ici. Des idées? Merci.

+0

Pouvez-vous fournir votre fichier web.xml? et tout votre servlet-servlet.xml ?? J'ai testé votre contrôleur avec la même vue sur mon côté et il est rendu correctement. – rochb

Répondre

13

Etes-vous sûr que l'évaluation de EL est activée dans votre JSP? J'ai parfois eu le problème, ça a tourné d'une façon ou d'une autre. Essayez d'évaluer une expression simple comme ${'test'} et de voir si «test» apparaît.

Vous pouvez également essayer de l'activer avec des directives de page ou autre chose si EL doit être désactivé.

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

(Désolé, je ne me souviens pas si cela 100% correct. Il est peut-être « isELEnabled »)

+2

Nice! Ajouter <% @ page isELIgnored = "false"%> au début de mon jsp a résolu mon problème. Je ne suis pas sûr de ce qui se passe pour désactiver EL. Oh, y compris la propriété isScriptingEnabled semble casser le jsp, donc je l'ai juste enlevé. Il semble que la propriété isScriptingEnabled était valide avant JSP 2.0? Donc, en résumé, l'ajout de <% @ page isELIgnored = "false"%> à mon jsp a résolu le problème. Merci, Moxn – labratmatt

+1

De rien. Je suis assez sûr qu'il y a un moyen de configurer cela dans le fichier web.xml. Selon [this] [1] vous pouvez ajouter la configuration come à votre fichier web.xml pour activer EL pour tous vos JSP. [1] http://www.theserverside.com/discussions/thread.tss?thread_id=44097 – moxn

1

Je n'ai pas utilisé autant de configuration d'annotation que vous avez avec Spring MVC, donc je ne suis pas sûr de tout ce qui est fait automatiquement avec votre configuration. Ma seule pensée est la suivante: le paramètre method doit-il être un objet ModelMap? Les exemples que j'ai vus auparavant ont tous utilisé ModelMap comme type de paramètre. Section 13.11.3 de cette page est l'un d'entre eux: http://static.springsource.org/spring/docs/2.5.6/reference/mvc.html. Comme je l'ai dit, je n'ai jamais utilisé ce type d'auto-configuration auparavant - je le fais un peu plus manuellement, et j'élargis mes contrôleurs à partir de quelque chose comme un AbstractController ou un SimpleFormController.

+0

Merci pour le temps. J'ai essayé d'utiliser un ModelMap et j'ai eu le même résultat. – labratmatt

4

je suis tombé sur le même problème, et après avoir comparé 2 applications similaires (un avec le travail EL bien et l'autre pas), a remarqué que le problème sur mon tomcat 7 dépendait de la version webapp spécifiée dans le web.xml de l'application.

Le même fichier jasp utilisant Web App 2.3 affiche $ {someMessage}. (BTW, c'est ce que vous obtenez en utilisant maven archetype: générer avec archetypeArtifactId = 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> 
... 

Le même jsp en utilisant Web App 2.4 affiche le modèle objet correctement:

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

espoir que ça aide!

Questions connexes