【问题标题】:How do I do the equivalent of a java If-Else block using JSTL? [duplicate]如何使用 JSTL 执行相当于 java If-Else 块的操作? [复制]
【发布时间】:2011-09-07 08:04:30
【问题描述】:

一个快速的 JSTL 问题。我通常在我的 jsp 页面中使用 scriptlet,但由于我的页面中的一些其他内容而发生冲突。我知道你可以使用 JSTL 来做这样的事情,虽然我不熟悉它。这是我将为此使用 java 编写的代码:

if (var1.equalsIgnoreCase(var2)) { 

some html stuff

} else {

more html

}

那么可以将其转换并翻译为与 JSTL 一起使用吗?

提前致谢,如果您有任何问题,请告诉我。

【问题讨论】:

  • 别忘了你的taglib声明:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

标签: java jstl


【解决方案1】:

您可以为此使用<c:choose>equalsIgnoreCase() 可以通过将两边小写fn:toLowerCase() 来完成。

<c:choose>
    <c:when test="${fn:toLowerCase(var1) == fn:toLowerCase(var2)}">
        Both are equal.
    </c:when>
    <c:otherwise>
        Both are not equal.
    </c:otherwise>
</c:choose>

或者,当您使用声明为符合 Servlet 3.0 的 web.xml 的 Servlet 3.0 容器(Tomcat 7、Glassfish 3、JBoss AS 6 等)时,您可以调用 equalsIgnoreCase() 方法。

<c:choose>
    <c:when test="${var1.equalsIgnoreCase(var2)}">
        Both are equal.
    </c:when>
    <c:otherwise>
        Both are not equal.
    </c:otherwise>
</c:choose>

【讨论】:

  • +1 我在写什么。缺少直接的 if/else 是 JSTL 的一个普遍抱怨的特性。选择/何时/否则可能比条件反转的两个 if 更好,但它肯定是罗嗦的。那么这毕竟是Java!
  • @bobince:您确实也可以选择两个&lt;c:if&gt; 标签,其中另一个比较相反。
  • @BalusC ,这是有道理的,虽然我对 JSTL 不是很熟悉,而且我得到了一个 java.lang.ClassCastException。 var1 和 var2 都是字符串,如果这很重要的话。我也导入了 taglib。有什么理由让我得到这个?
  • 您在.equalsIgnoreCase() 上获得了 CCE?好吧,显然它们在设置变量时被 EL 强制转换为不同的类型。我会选择第一种方法。将&lt;%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %&gt; 添加到顶部以使fn:xxx 函数正常工作。
  • 我还是不知道...我现在在添加新标签库时遇到错误
【解决方案2】:
<c:if test=${var1 == var2)}>
</c:if>

没有 Else 是 JSTL,你必须做多个 If(我知道糟透了)

必须在顶部添加这个

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>

【讨论】:

  • 请注意,带参数的方法调用仅在您运行 Servlet 3.0 / EL 2.2 时有效。
  • 他们需要一个 else 块,所以它必须是 &lt;c:choose&gt;
  • @BalusC 真的吗?我不知道。
  • 你是对的。但多个 if 会起作用。只是效率不高
  • 请改变你的答案——你说没有别的,而实际上有一个等效的结构。
猜你喜欢
  • 1970-01-01
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
  • 2021-07-19
相关资源
最近更新 更多