jsp-如何比较EL表达式语言中的两个对象变量?

我正在创建所有语言的下拉列表。 列表的默认语言选择将由用户添加的信息决定:

<select>
    <c:forEach items="${languages}" var="lang">
        <c:choose>
            <c:when test="${lang}.equals(${pageLang})">
                <option value="${lang}" selected>${lang}</option>
            </c:when>
            <c:otherwise>
                <option value="${lang}">${lang}</option>
            </c:otherwise>
        </c:choose>
    </c:forEach>
</select>

.equals在EL中似乎不存在。 看过这里,建议我编写自己的函数,然后导入并使用它。 因为这仅仅是此页面的一件小事,所以我不想为此而开始创建库等。 我也不想开始为servlet创建专家对象以返回其中的额外信息。

我唯一想做的就是从Servlet中返回整个选项行的实际html,而不仅仅是返回语言字符串,但这使我感到很丑陋,所以我希望有一个更优雅的解决方案。

快速解决比较EL中两个字符串的最佳方案是什么?

J2EE 1.4教程

Caroline asked 2020-07-12T01:52:52Z
2个解决方案
103 votes

在表达式语言中,您可以只使用==eq运算符来比较对象值。 在幕后,他们实际上将使用2962538979092092071426。这样做是因为,直到使用当前的EL 2.1版本,您才能调用具有除标准getter(和setter)方法之外的其他签名的方法(在即将到来的EL 2.2中是可能的) 。

所以特别的线

<c:when test="${lang}.equals(${pageLang})">

应该写为(请注意,整个表达式位于String}内部)

<c:when test="${lang == pageLang}">

或者,等效地

<c:when test="${lang eq pageLang}">

两者都在幕后,大致解释为

jspContext.findAttribute("lang").equals(jspContext.findAttribute("pageLang"))

如果要比较常量String的值,则需要引用它

<c:when test="${lang == 'en'}">

或者,等效地

<c:when test="${lang eq 'en'}">

这在幕后大概被解释为

jspContext.findAttribute("lang").equals("en")
BalusC answered 2020-07-12T01:53:39Z
3 votes

不知道我是否正确,但是最简单的方法是:

<c:if test="${languageBean.locale == 'en'">
  <f:selectItems value="#{customerBean.selectableCommands_limited_en}" />
</c:if>

只需从我的应用程序中快速复制并粘贴...

高温超导

KB22 answered 2020-07-12T01:54:08Z
translate from https://stackoverflow.com:/questions/1900843/how-to-compare-two-object-variables-in-el-expression-language