2010-02-12 18 views
5

Per prima cosa ho un controller Spring 3.0 con un metodo simile al seguente.Come passare un oggetto dal controller Spring 3.0 alla visualizzazione JSP e testare con JSTL

Sto passando la vista a un oggetto denominato "messaggio" e sperando di stampare quel messaggio tramite la vista se è stato impostato dal metodo "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 vista è simile alla seguente,

<%@ 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> 

Finora, solo "test5" sta stampando il messaggio, ma ho solo voglia di stampare il messaggio se "$ {} message.message "non è nullo.

Ho provato sia "http://java.sun.com/jstl/core_rt" e "http://java.sun.com/jstl/core", ma non riesco a ottenere il "< c: se/>" dichiarazioni per funzionare correttamente.

Qualcuno ha qualche idea su cosa sto facendo male o un modo migliore per farlo?

Grazie

risposta

1

I suoi primi due <c:if> tag dovrebbe essere simile a questo:!

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

Nota la posizione del = ei} a l'attributo di prova - la condizione deve essere all'interno le parentesi graffe.

anche, il test a # 3:

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

valuterà solo vero se il valore della message.message è infatti il ​​valore "vero". Dal momento che non è (è "Hello World"), il test fallisce.

Test # 4 è anche formattato correttamente (il "non è vuoto" deve essere anche all'interno delle parentesi graffe) ...

+0

Oh grazie un gruppo - che è quello che era. – wsams

+0

@ user272159: Hai solo ** veramente ** bisogno di sbarazzarti degli URI deprecati e di qualsiasi JAR JSTL vecchio. Vedi anche la mia risposta. – BalusC

1

L'URI che stai cercando è http://java.sun.com/jsp/jstl/core

4

Il taglib URI è sbagliato. È il vecchio URI JSTL 1.0. Da dove lo hai preso? Lanciare il tutorial/libro di 10 anni di distanza;) Vai a JSTL 1.2 here e rilascialo in /WEB-INF/lib dopo aver rimosso le vecchie librerie JSTL (jstl.jarestandard.jar) e gli eventuali contenuti estratti (alcuni scarsi tutorial suggeriscono che è necessario estrarre il .tld file e metterlo in classpath, questo è errato).

L'URI destro è specificato nel recente JSTL TLD documentation. Se fai clic su una delle singole librerie JSTL, vedrai l'esempio URI giusto nella parte superiore del documento, ad es. JSTL core:

standard Sintassi:

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

XML Sintassi:

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

Detto questo, i test sono in realtà sbagliato. Avresti dovuto usare ${message.message != null}, ${message.message != ''} e ${not empty message.message}. Puoi ottenere ulteriori informazioni su EL in Java EE tutorial part II chapter 5 e su JSTL in Java EE tutorial part II chapter 7. In bocca al lupo.

Problemi correlati