【问题标题】:If-then-else inside a JSP expression?JSP 表达式中的 if-then-else?
【发布时间】:2012-02-18 22:47:44
【问题描述】:

你能在 JSP 表达式中执行 if-then-else 语句吗?

编辑: 具体来说,我在寻找 JSP 解决方案,而不是 JSTL 解决方案。但是下面的一些 JSTL 解决方案得到了很高的评价并且非常受欢迎。请不要因为重复的问题而拒绝我,因为已经有人问过关于 JSTL 的问题。

【问题讨论】:

标签: java jsp expression


【解决方案1】:

我使用了一种不同的方法,因为 Eclipse 一直告诉我它无法解析来自 servlet 的变量,而该变量在执行时位于下面(PS:我是 JSP 新手):

${if(var != null)"text to print"}
${if(var != null)var}  to print a variable 
${if(var != null)"text to print"}

结果会是这样的

要打印的文本 要打印的文本

【讨论】:

    【解决方案2】:

    你可以用这样的jsp标签来包装你的html代码:

    <% if (condition) { %>
    <div>Condition is true!</div>
    <% } else { %>
    <div>Condition is false</div>
    <% } %>
    

    【讨论】:

    • 我也喜欢这个。这实际上是我目前的解决方案!但它使用的是 JSP Scriptlet,而不是 JSP 表达式。我只想要最优雅的解决方案。
    【解决方案3】:

    在 JSP EL 2.0 中,您可以使用三元运算符来做到这一点。例如:

    <option value="1" ${param.number == 1 ? 'selected' : ''}>First option</option>
    

    它的作用是检查 JSP 的 param 的 number 变量。如果它是 1,则选择被替换。否则,什么都没有。

    【讨论】:

    • 我喜欢这个。但我不确定它是什么。它不是 JSP 表达式。我可以在这里从我的 JSP Scriptlet 访问变量吗? (我现在正在尝试但失败了。)
    • param 包含来自 scriptlet 的所有变量。 param.number 只会访问 number 的值。
    • 我的 JSP Scriplet 中有一个 boolean even,但 param.even 似乎无法访问它。 even 每行从true 切换到false,当我使用${param.even == true ? 'even' : 'odd'} 或${param.even ? 'even' : 'odd'} 时,我得到的只是odd 一遍又一遍的输出。
    【解决方案4】:

    如果您使用的是 JSTL,则可以选择时选择。

    <c:choose>
      <c:when test="condition"></c:when>
      <c:when test="condition2"></c:when>
      <c:otherwise></c:otherwise>
    </c:choose>
    

    有关 JSTL 的更多信息,请尝试here。

    【讨论】:

    • 谢谢你,但我正在寻找 JSP 解决方案而不是 JSTL 解决方案。我最终不确定这对我的项目是否重要,但我还不熟悉 JSTL。
    • JSTL 增加了很多功能......如果您正在使用 JSP 制作 UI,那么它可能值得一看。上手非常简单。
    • 谢谢。我可能需要调查一下。它似乎也可以轻松处理转义基于 Web 的字符串。感觉它为网络应用程序设计得非常好。就像我说的,我从未使用过它,所以这就是它的样子。我实际上在 JSP Scriptlets 和 JSP Expressions 和 JSTL 之间有点困惑。当我使用它们时,我希望能掌握每一个的目的和位置。到目前为止,一个和另一个之间的选择似乎是为了优雅。这实际上是我的问题的目的。
    • 我认为在大多数情况下,避免将 Java 代码直接放入 JSP 中被认为是一种很好的做法。将所有这些都保留在 Spring 控制器中,然后只使用 JSP 中的 JSTL 之类的东西(或完全使用另一种视图技术)来做最少的逻辑。
    • 这就是模型-视图-控制器范式的全部思想。祝你编码好运! :)
    猜你喜欢
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    相关资源
    最近更新 更多