我有控制器:
@RequestMapping(method = RequestMethod.GET)
public String getViewRailwayService(@RequestParam long id, Model model) {
model.addAttribute("railwayService",railwayServiceRepository.findOne(id));
return "admin/railwayService/view";
}
和jsp页面:
...
<title>${railwayService.name}</title>
<c:forEach var="company" items="${railwayService.companies}">
...
它工作正常,但我感到困惑,当railwayServiceRepository.findOne(id)
返回null
时NullPointerException不会抛出。
答案 0 :(得分:6)
不确定StackOverflow wiki on Expression Language是否是值得信赖的参考(我一直试图在官方规格中找到它,但没有运气),但是:
EL在访问属性时依赖于JavaBeans规范。在JSP中,使用以下表达式:
${user.name}
与&#34; raw&#34;中的以下内容基本相同scriptlet代码(下面的例子是为了简单起见,实际上反射API用于获取方法并调用它们):
<%
User user = (User) pageContext.findAttribute("user");
if (user != null) {
String name = user.getName();
if (name != null) {
out.print(name);
}
}
%>
(...)请注意,因此它不会打印&#34; null&#34;当值为null时也不会抛出
NullPointerException
,这与使用scriptlet时不同。 换句话说,EL是无效的。
答案 1 :(得分:-2)
在model.addAttribute("railwayService",railwayServiceRepository.findOne(id));
每当value为null时,它都不会抛出NullPointerException
,它只会将值作为null传递给视图。