2015-03-05 11 views
6

Ho regolatore:JSP non buttare NullPointerException

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

e jsp pagina:

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

Funziona bene, ma io confuso, quando railwayServiceRepository.findOne(id) ritorno null NullPointerException non buttare.

risposta

6

Non sono sicuro se un StackOverflow wiki on Expression Language è un riferimento affidabile (ho cercato di trovare nelle specifiche ufficiali, ma senza fortuna), ma:

EL si basa sulla specifica JavaBeans quando arriva ad accedere alle proprietà. In JSP, la seguente espressione:

${user.name}

fa sostanzialmente la stessa come la seguente nel codice scriptlet "grezza" (nell'esempio sotto è per semplicità, in realtà l'API riflessione viene utilizzato per ottenere i metodi e richiamare loro):

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

(...) si prega di notare che in tal modo non viene stampata "null" quando il valore è nullo né lancia un NullPointerException a differenza di quando si utilizza scriptlet. In altre parole, EL è nullo.

+1

Vedere _JSR 341: Expression Language 3.0, 1.6, "Operators [] and." _ Per una parte della specifica che spiega questo comportamento a prova di nullità. –

-2

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

ogniqualvolta valore è nullo, non gettare NullPointerException, Sarà sufficiente passare valore nullo alla vista.

+2

penso Tkachuk_Evgen significa in jsp – ccheneson

+0

@Sandeep Patange, è vero, ma quando provo ad accedere '$ {} railwayService.companies' non succede nulla –

+0

Ci scusiamo per non aver dato la spiegazione chiara, ma voglio dire la stessa quello che Kryger ha spiegato. –