【发布时间】:2009-05-26 18:53:27
【问题描述】:
我在 Linux 上运行 Tomcat 6.0.18。
我有一个使用这样的 bean 的 JSP:
<jsp:useBean id="helper"
type="com.example.SomeType"
scope="request"/>
页面引用helper的属性,表达式语言如下:
<!-- This works properly, but could fail silently if the bean name is incorrect. -->
<div><p>Here's some stuff: ${helper.stuff}</div>
在一些重构过程中,我错过了名称 helper 的出现,我注意到如果名称 helper 写入不正确,不会引发错误。不在屏幕上,也不在我的日志文件中。输出中没有为表达式语言 sn-p 生成任何内容:
<!-- Wrong name! "foo" should be "helper" but no error is observed (other than missing ouput)! -->
<div><p>Here's some stuff: ${foo.stuff}</div>
现在,如果我使用以下 JSP 语法且 helper 的名称不正确,则会引发错误 (显示我的自定义错误页面,并且我在日志文件中看到异常): p>
<!-- Wrong name, but an error is raised. -->
<div><p>Here's some stuff: <jsp:getProperty name="foo" property="stuff"/></div>
在这种情况下,日志会记录以下条目:
SEVERE: requestURI: /some.jsp servletName: jsp statusCode: 500
org.apache.jasper.JasperException: Attempted a bean operation on a null object.
为了完整起见,jsp:getProperty 语法在 bean 名称正确时可以正常工作:
<!-- Works properly, protects me from an incorrect name, but is more verbose than EL. -->
<div><p>Here's some stuff: <jsp:getProperty name="helper" property="stuff"/></div>
为什么我在编写 ${foo.stuff} 时没有看到错误?在这种情况下是否有一些配置选项可以控制错误报告?
【问题讨论】:
-
只是为了肯定别人所说的,这是EL的一个有目的的功能。