我们知道脚本变量state是 true。
为什么这个 scriptlet 表达式是错误的?翻译后如何将代码转换为 _jspService 方法?
<%=
if(state) {
"yes";
} else {
"no";
}
%>
这是正确的
<%= state ? "yes" : "no" %>
因为返回一个值,它会在 _jspService 中显示为
public void _jspService(...){
out.println("yes");
}
该if / else
版本在语法上与三元运算符不同。它不会“返回”任何东西。
为了使类似的工作你需要这样做
<%
if (state) {
out.print("yes");
} else {
out.print("no");
}
%>
if 语句需要做些什么。他们不能只将字符串作为唯一的语句。三元运算符选择并返回所选值。
具有语法的 Scriptlet 块<%= %>
必须是产生要输出的值的单个表达式。基本上,他们必须对某事进行评估。即使该if
语句在语法上是有效的,它仍然不会返回值。
Roel de Nijs 说:
JSP 表达式 <%= ... %> 放在 out.print() 中
所以 <%= 状态?"yes" : "no" %> 被转换成 out.println(state ? "yes" : "no");,编译没有任何问题。但是使用 if 语句,生成的代码将无法编译。这也是为什么 jsp 表达式中不允许使用分号的原因。