为什么我不能在scriptlet表达式中使用if-else语句,而三元运算符可以正常工作

时间:2013-10-09 18:27:41

标签: jsp scriptlet

我们知道脚本变量 state 是真的。

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

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

这是正确的

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

因为返回一个值,它将作为

显示在_jspService中
public void _jspService(...){
   out.println("yes");
}

2 个答案:

答案 0 :(得分:2)

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

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

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

如果陈述需要。他们不能只有一个字符串作为他们唯一的陈述。三元运算符选择并返回所选值。

具有<%= %>语法的Scriptlet块必须是生成要输出的值的单个表达式。基本上他们必须评估一些东西。即使if语句在语法上有效,它仍然不会返回值。

答案 1 :(得分:0)

Roel de Nijs说:

  

JSP表达式&lt;%= ...%&gt;放在out.print()

中      

所以&lt;%=州? “是”:“否”%&gt;转换成out.println(状态?   “是”:“不”);,编译没有任何问题。但随着   if语句生成的代码将无法编译。这也是原因   不允许在jsp表达式中使用分号。