2015-03-05 13 views
6

Tôi có điều khiển:JSP không ném NullPointerException

@RequestMapping(method = RequestMethod.GET) 
public String getViewRailwayService(@RequestParam long id, Model model) { 
    model.addAttribute("railwayService",railwayServiceRepository.findOne(id)); 
    return "admin/railwayService/view"; 
} 

và jsp trang:

... 
<title>${railwayService.name}</title> 
<c:forEach var="company" items="${railwayService.companies}"> 
... 

Nó hoạt động tốt, nhưng tôi bối rối, khi railwayServiceRepository.findOne(id) trở null NullPointerException không ném.

Trả lời

6

Không chắc chắn nếu một StackOverflow wiki on Expression Language là một tài liệu tham khảo đáng tin cậy (Tôi đã cố gắng để tìm thấy nó trong các thông số kỹ thuật chính thức, không có may mắn được nêu), nhưng:

EL dựa trên đặc điểm kỹ thuật JavaBeans khi nó đến để truy cập các thuộc tính. Trong JSP, biểu thức sau đây:

${user.name}

làm về cơ bản giống như sau trong "thô" mã scriptlet (ví dụ dưới đây là vì đơn giản, trong thực tế API phản chiếu được sử dụng để có được những phương pháp và gọi chúng):

<% 
    User user = (User) pageContext.findAttribute("user"); 
    if (user != null) { 
    String name = user.getName(); 
    if (name != null) { 
     out.print(name); 
    } 
    } 
%> 

(...) Xin lưu ý rằng nó như vậy không in "null" khi giá trị là null hay ném một NullPointerException không giống như khi sử dụng scriptlets. Nói cách khác, EL không an toàn.

+1

Xem _JSR 341: Ngôn ngữ biểu thức 3.0, 1.6, "Toán tử [] và." _ Cho một phần của đặc tả giải thích hành vi không an toàn này. –

-2

Trong model.addAttribute("railwayService",railwayServiceRepository.findOne(id));

bất cứ khi nào giá trị là null, nó sẽ không ném NullPointerException, Nó sẽ chỉ cần vượt qua giá trị như null để xem.

+2

Tôi nghĩ Tkachuk_Evgen nghĩa trong jsp – ccheneson

+0

@Sandeep Patange, đúng vậy nhưng khi tôi cố gắng truy cập '$ {railwayService.companies}' có gì xảy ra –

+0

Xin lỗi vì đã không đưa ra lời giải thích rõ ràng, nhưng tôi có ý nghĩa giống những gì Kryger đã giải thích. –

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