我有一个由servlet在requestScope中设置的城市列表。
这是我的代码
我已经添加了所需的标记库
你能告诉我为什么containsIgnoreCase不工作吗?
public class City {
private Long id;
private String name;
private int population;
// getters and setters
}
//
<c:forEach items="${requestScope.cityList}" var="city">
<tr>
<c:if test = "${fn:containsIgnoreCase(${city.name}, 'NewYork')}">
<p>Add a Color Here for NewYork <p>
</c:if>
<c:if test = "${fn:containsIgnoreCase(${city.name}, 'Houston')}">
<p>Add a Color Here Houston <p>
</c:if>
<td><c:out value="${city.id}"></c:out></td>
<td><c:out value="${city.name}"></c:out></td>
<td><c:out value="${city.population}"></c:out></td>
</tr>
</c:forEach>发布于 2019-06-25 13:57:42
应该是${fn:containsIgnoreCase(city.name, 'NewYork')}。您已经在JSP表达式中,因此在该表达式中再次使用${}是无效的。
发布于 2019-06-25 14:00:12
该containsIgnoreCase无效,因为您试图在另一个表达式(${city.name})中打开另一个表达式(${fn:containsIgnoreCase()})。
你应该简化你的代码,以:
<c:if test = "${fn:containsIgnoreCase(city.name, 'Houston')}">发布于 2019-06-25 17:38:18
不能嵌套EL表达式。
当在另一个EL表达式中时,${city.name}的计算结果为null。这就是它不起作用的原因。
不过,您可以将它们连接起来:
${foo}${bar}
在这种情况下,您可以在forEach块中设置一个局部变量,如下所示:
<c:forEach items="${requestScope.cityList}" var="city">
<c:set var="cityVar" value="${city.name}" />
<tr>
<c:if test = "${fn:containsIgnoreCase(cityVar, 'NewYork')}">
<p>Add a Color Here for NewYork <p>
</c:if>
<c:if test = "${fn:containsIgnoreCase(cityVar, 'Houston')}">
<p>Add a Color Here Houston <p>
</c:if>
<td><c:out value="${city.id}"></c:out></td>
<td><c:out value="${city.name}"></c:out></td>
<td><c:out value="${city.population}"></c:out></td>
</tr>
</c:forEach>希望这能有所帮助
https://stackoverflow.com/questions/56747016
复制相似问题