2010-02-12 6 views
5

D'abord, j'ai un contrôleur Spring 3.0 avec une méthode similaire à celle-ci.Comment passer un objet du contrôleur Spring 3.0 à la vue JSP et tester avec JSTL

Je passe la vue à un objet nommé "message" et espère imprimer ce message via la vue si elle a été définie par la méthode "doStuff".

@RequestMapping("/index") 
public ModelAndView doStuff() { 
    ModelAndView mav = new ModelAndView(); 
    Map<String, String> message = new HashMap<String, String>(); 
    message.put("message", "Hello World"); 
    mav.setViewName("pages/myView"); 
    mav.addObject("message", message); 
    return mav; 
} 

La vue est similaire à ce qui suit,

<%@ page session="false"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %> 
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %> 
<html> 
<head> 
<title>Test</title> 
</head> 
<body> 
<c:if test="${message.message} != null"> 
    <div class="msg">test1: ${message.message}</div> 
</c:if> 
<c:if test="${message.message} != ''"> 
    <div class="msg">test2: ${message.message}</div> 
</c:if> 
<c:if test="${message.message}"> 
    <div class="msg">test3: ${message.message}</div> 
</c:if> 
<c:if test="not empty ${message.message}"> 
    <div class="msg">test4: ${message.message}</div> 
</c:if> 
<div class="msg">test5: ${message.message}</div> 
</body> 
</html> 

Jusqu'à présent, seul "test5" imprime le message, mais je veux seulement imprimer le message si « $ {} message.message " est non nulle.

J'ai essayé à la fois « http://java.sun.com/jstl/core_rt » et « http://java.sun.com/jstl/core », mais ne peut pas sembler obtenir le « < c: si/> » déclarations de travailler correctement.

Est-ce que quelqu'un aurait des idées sur ce que je fais mal ou une meilleure façon de le faire?

Merci

Répondre

1

Vos deux premières balises <c:if> devrait ressembler à ceci:

<c:if test="${message.message != null}"> 
    <div class="msg">test1: ${message.message}</div> 
</c:if> 
<c:if test="${message.message != ''}"> 
    <div class="msg">test2: ${message.message}</div> 
</c:if> 

Notez le placement du = et les} dans l'attribut de test - la condition doit être à l'intérieur les accolades.

aussi, le test en # 3:

<c:if test="${message.message}"> 
    <div class="msg">test3: ${message.message}</div> 
</c:if> 

ne sera évaluée à true si la valeur de la message.message est en fait la valeur "true". Comme ce n'est pas le cas (c'est "Hello World"), le test échoue.

Test n ° 4 est également mal formaté (le « non vide » doit aussi être à l'intérieur des accolades) ...

+0

Oh merci tas - c'est ce qu'il était. – wsams

+0

@ user272159: Vous avez seulement ** vraiment ** besoin de vous débarrasser des URI obsolètes et des anciens JAR JSTL. Voir aussi ma réponse. – BalusC

1

L'URI que vous recherchez est http://java.sun.com/jsp/jstl/core

4

L'URI taglib est erroné. C'est l'ancien URI JSTL 1.0. Où est-ce que tu l'as trouvé? Jetez ce tutoriel/livre de 10 ans;) Allez obtenir JSTL 1.2 here et déposez-le en /WEB-INF/lib après avoir supprimé les anciennes bibliothèques JSTL (jstl.jaretstandard.jar) et le contenu éventuellement extrait (certains tutoriels pauvres suggère que vous avez besoin d'extraire le .tld fichiers et le mettre dans classpath, c'est tort).

L'adresse URI droite est spécifiée dans le JSTL TLD documentation récent. Si vous cliquez sur l'une des bibliothèques JSTL individuelles, vous verrez l'exemple d'URI approprié en haut du document, par ex. JSTL core:

Syntaxe Standard:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

XML Syntaxe:

<anyxmlelement xmlns:c="http://java.sun.com/jsp/jstl/core" /> 

Cela dit, vos tests sont en fait mal. Vous auriez dû utiliser ${message.message != null}, ${message.message != ''} et ${not empty message.message}. Vous pouvez en apprendre plus sur EL dans Java EE tutorial part II chapter 5 et sur JSTL dans Java EE tutorial part II chapter 7. Bonne chance.

Questions connexes