我正在创建一个所有语言的下拉列表。列表的默认语言选择将由用户添加的信息确定: select c:forEach items="${languages}" var="lang" c:choose c:when test="${lang}.equals(${pageLang})" option value="${lang}" se
<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是可能的)。所以特定的行
<c:when test="${lang}.equals(${pageLang})">
应该写成(注意整个表达式在{和}内)
<c:when test="${lang == pageLang}">
或等效地
<c:when test="${lang eq pageLang}">
两者都是幕后的粗略解释
jspContext.findAttribute("lang").equals(jspContext.findAttribute("pageLang"))
如果你想比较常量字符串值,那么你需要引用它
<c:when test="${lang == 'en'}">
或等同地
<c:when test="${lang eq 'en'}">
这是幕后的粗略解释
jspContext.findAttribute("lang").equals("en")