我正在创建所有语言的下拉列表。列表的默认语言选择将由用户添加的信息决定:
<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>
.equalsEL中似乎不存在。看过这里,建议我编写自己的函数,然后导入并使用它。因为这仅仅是此页面的一件小事,所以我不想为此而开始创建库等。我也不想开始为servlet创建专家对象以返回其中的额外信息。
.equals
我唯一想做的就是从servlet中返回整个选项行的实际html,而不仅仅是返回语言字符串,但这使我感到很丑陋,所以我希望有一个更优雅的解决方案。
快速解决比较EL中两个字符串的最佳方案是什么?
J2EE 1.4教程
在表达式语言中,您可以仅使用==或eq运算符比较对象值。他们实际上将在幕后使用Object#equals()。这样做是因为,直到使用当前的EL 2.1版本,您才能调用具有除标准getter(和setter)方法以外的其他签名的方法(在即将到来的EL 2.2中是可能的)。
==
eq
Object#equals()
所以特别的线
<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量值,则需要引用它
String
<c:when test="${lang == 'en'}">
<c:when test="${lang eq 'en'}">
这是幕后的大致解释为
jspContext.findAttribute("lang").equals("en")