gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 06:31:40 24 4
gpt4 key购买 nike

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

<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 中比较两个字符串的最佳计划是什么?

The J2EE 1.4 Tutorial

最佳答案

Expression Language您可以仅使用 ==eq 运算符来比较对象值。在幕后,他们实际上会使用 Object#equals()。之所以这样做,是因为在当前的 EL 2.1 版本之前,您无法调用具有标准 getter(和 setter)方法之外的其他签名的方法(在即将推出的 EL 2.2 中这是可能的)。

并且您需要确保整个表达式放置在相同的 ${...} 范围内。任何超出范围的内容都不会被解释为 EL 表达式的一部分。

所以特定的行

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

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

<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")

关于jsp - 如何在EL表达式语言中比较两个对象变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1900843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com