2010-02-12 30 views
5

Đầu tiên tôi có bộ điều khiển Spring 3.0 với một phương thức tương tự như sau.Cách truyền đối tượng từ bộ điều khiển Spring 3.0 đến JSP và kiểm tra với JSTL

Tôi đang chuyển chế độ xem một đối tượng có tên là "message" và hy vọng in thông báo đó qua chế độ xem nếu nó đã được đặt bởi phương thức "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; 
} 

Quan điểm là tương tự như sau,

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

Cho đến nay, chỉ có "test5" được in thông điệp, nhưng tôi chỉ muốn in thông điệp nếu "$ {} message.message "không phải là null.

Tôi đã thử cả hai "http://java.sun.com/jstl/core_rt" và "http://java.sun.com/jstl/core", nhưng dường như không nhận được câu lệnh "< c: if/>" để hoạt động chính xác.

Có ai có bất kỳ ý tưởng nào về những gì tôi đang làm sai hoặc cách tốt hơn để làm điều đó không?

Cảm ơn

Trả lời

1

bạn hai <c:if> thẻ đầu tiên sẽ trông như thế này:

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

Lưu ý vị trí của = và} trong thuộc tính kiểm tra - điều kiện cần phải được bên dấu ngoặc.

cũng có, các thử nghiệm trong # 3:

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

Sẽ chỉ đánh giá là true nếu giá trị của message.message là trong thực tế giá trị "true". Vì nó không phải là (nó là "Hello World"), kiểm tra thất bại.

Kiểm tra # 4 cũng được định dạng không chính xác ("không trống" cũng cần phải nằm trong dấu ngoặc ôm) ...

+0

Oh cảm ơn một bó - đó là những gì nó được. – wsams

+0

@ user272159: Bạn chỉ ** thực sự ** cần loại bỏ URI không dùng nữa và bất kỳ JSTL JAR cũ nào. Cũng thấy câu trả lời của tôi. – BalusC

1

URI bạn đang muốn tìm http://java.sun.com/jsp/jstl/core

4

Các taglib URI là sai. Đó là URI JSTL 1.0 cũ. Bạn đã có được nó từ đâu? Hãy ném JSTL 1.2 here và thả nó vào /WEB-INF/lib sau khi xóa bất kỳ thư viện JSTL cũ nào (jstl.jarstandard.jar) và nội dung được trích xuất cuối cùng (một số hướng dẫn kém có nghĩa là bạn cần trích xuất .tld tệp và đặt nó trong classpath, đây là sai).

URI phù hợp được chỉ định trong JSTL TLD documentation gần đây. Nếu bạn nhấp vào bất kỳ thư viện JSTL riêng lẻ nào, bạn sẽ thấy ví dụ URI phù hợp ở đầu tài liệu, ví dụ: JSTL core:

Chuẩn Cú pháp:

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

XML Cú pháp:

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

Điều đó nói rằng, kiểm tra của bạn là trong thực tế sai. Bạn đã sử dụng ${message.message != null}, ${message.message != ''}${not empty message.message}. Bạn có thể tìm hiểu thêm về EL trong Java EE tutorial part II chapter 5 và về JSTL trong Java EE tutorial part II chapter 7. Chúc may mắn.

Các vấn đề liên quan