为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

有只小跳蛙 2019-08-28 10:42:56
如何比较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教程
查看完整描述

3 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

表达式语言中,您只需使用==eq运算符来比较对象值。在幕后,他们将实际使用Object#equals()。这样做是这样的,因为除了当前的EL 2.1版本之外,你不能使用其他签名来调用带有标准getter(和setter)方法的方法(在即将发布的EL 2.2中,它是可能的)。

所以特定的路线

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


查看完整回答
反对 回复 2019-08-28
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

不确定我是否帮助你,但最简单的方法是:

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

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


查看完整回答
反对 回复 2019-08-28
?
慕斯王

TA贡献1864条经验 获得超2个赞

“快速复制和粘贴”代码片段而不实际理解他们所做的是非常有害的,并且不会让自己受到重视。我建议不要这样做。这同样适用于将JSF与JSTL混合在一起,就像您在代码片段中所表达的那样,但这是另一个故事。 

查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 859 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信