1

我们知道脚本变量state是 true。

为什么这个 scriptlet 表达式是错误的?翻译后如何将代码转换为 _jspService 方法?

<%=
if(state) {
  "yes";
} else {
  "no";
}
%>

这是正确的

<%= state ? "yes" : "no" %>

因为返回一个值,它会在 _jspService 中显示为

public void _jspService(...){
   out.println("yes");
}
4

2 回答 2

2

if / else版本在语法上与三元运算符不同。它不会“返回”任何东西。

为了使类似的工作你需要这样做

<%
    if (state) {
        out.print("yes");
    } else {
        out.print("no");
    }
%>

if 语句需要做些什么。他们不能只将字符串作为唯一的语句。三元运算符选择并返回所选值。

具有语法的 Scriptlet 块<%= %>必须是产生要输出的值的单个表达式。基本上,他们必须对某事进行评估。即使该if语句在语法上是有效的,它仍然不会返回值。

于 2013-10-09T18:36:50.730 回答
0

Roel de Nijs 说:

JSP 表达式 <%= ... %> 放在 out.print() 中

所以 <%= 状态?"yes" : "no" %> 被转换成 out.println(state ? "yes" : "no");,编译没有任何问题。但是使用 if 语句,生成的代码将无法编译。这也是为什么 jsp 表达式中不允许使用分号的原因。

于 2013-10-10T15:00:06.913 回答