我有以下JSP页面:
<%@taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
test #1: value of PI is <c:out value="${java.lang.Math.PI}" />.
test #2: value of PI is ${java.lang.Math.PI}.
test #3: value of PI is <%= java.lang.Math.PI %>.
不知何故,只有测试#3有输出。为什么EL不打印出静态变量的值?
答案 0 :(得分:5)
对于您的每个示例,这都是正在发生的事情:
<c:out value="${java.lang.Math.PI}" />
这是在寻找名为java的变量或bean,并尝试在其上执行一个名为lang的方法。您的JSP页面中可能没有名为Java的变量或bean,因此没有输出。
${java.lang.Math.PI}
这与上面相同,仅使用EL编写。它是一样的,因为它正在寻找一个名为java的变量或bean。
<%= java.lang.Math.PI %>
这是在JSP编译期间,正在计算java.lang.Math.PI并将其写入JSP。如果查看编译后的JSP,您将看到写入的值。
第三个例子是评估表达式,就好像你在Java类中一样。前两个示例期望'java'是变量名。