【问题标题】:Why can't I use an if-else statement inside a scriptlet expression, whereas a ternary operator works fine为什么我不能在 scriptlet 表达式中使用 if-else 语句,而三元运算符工作正常
【发布时间】:2013-10-09 18:27:41
【问题描述】:

我们知道脚本变量state为真。

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

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

这是正确的

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

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

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

【问题讨论】:

  • 第一个不会转换为 _jspService 方法中的任何内容,因为它不是有效的语法。它无法编译。

标签: jsp scriptlet


【解决方案1】:

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

为了完成类似的工作,您需要这样做

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

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

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

【讨论】:

  • 我知道这是正确的 scriptlet 但问题是。为什么表达式错误 是因为我们可以在其中使用 if/else 吗?
【解决方案2】:

Roel de Nijs 说:

JSP 表达式 放在 out.print() 中

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

【讨论】:

    猜你喜欢
    • 2021-01-14
    • 1970-01-01
    • 2021-04-06
    • 2013-10-09
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    相关资源
    最近更新 更多