2010-02-12 14 views
5

首先,我有一個Spring 3.0控制器,其方法類似於以下內容。如何將對象從Spring 3.0控制器傳遞到JSP視圖並使用JSTL進行測試

我通過視圖名爲「消息」的對象,並希望通過視圖打印該消息,如果它已由「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; 
} 

的觀點是類似於以下,

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

到目前爲止,只有「TEST5」正在打印的消息,但我只想要打印的消息,如果「$ {} message.message 「不爲空。

我都試過「http://java.sun.com/jstl/core_rt」和「http://java.sun.com/jstl/core」,但似乎無法得到「< C:如果/ >」語句才能正常工作。

有沒有人有任何想法,我做錯了什麼或更好的方式來做到這一點?

感謝

回答

1

你的前兩個<c:if>標籤應該是這樣的:

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

注意放置的=和}測試屬性 - 條件必須括號。

此外,在#3測試:

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

只會評估爲true,如果message.message的價值實際上是在爲 「True」。由於它不是(它是「Hello World」),所以測試失敗。

測試#4也格式不正確(下稱「沒空」也需要花括號內)...

+0

哦,多謝 - 這就是它了。 – wsams 2010-02-15 15:40:53

+0

@ user272159:你只有**真的需要擺脫棄用的URI和任何舊的JSTL JAR。另請參閱我的答案。 – BalusC 2010-02-15 20:49:04

1

的URI你要找的是http://java.sun.com/jsp/jstl/core

4

的標記庫URI是錯誤的。這是舊的JSTL 1.0 URI。你從哪裏得到它的?拋出一個10歲的教程/本書了;)去拿JSTL 1.2 here並移除任何舊的JSTL庫(jstl.jarstandard.jar)和最終提取的內容後,將它放在/WEB-INF/lib(一些貧困教程即表明您需要提取.tld文件並放在classpath中,這是錯誤)。

在最近的JSTL TLD documentation中指定了正確的URI。如果您單擊任何單獨的JSTL庫,則會在文檔頂部看到正確的URI示例,例如, JSTL core

標準語法:

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

XML語法:

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

這就是說,你的測試實際上都是錯誤的。您應該使用${message.message != null}${message.message != ''}${not empty message.message}。您可以在Java EE tutorial part II chapter 5以及關於JSTL的Java EE tutorial part II chapter 7中瞭解有關EL的更多信息。祝你好運。

相關問題