一尘不染

检查Cookie是否与JSP EL存在

jsp

我正在尝试使用表达式语言检查JSP页面上是否存在cookie。

我有一个Cookie persist,它被设置为空字符串或“选中”。

如果要检查persistcookie是否存在。

我尝试了以下方法:

<c:if test="${cookie.persist == null}">

<c:if test="${empty cookie.persist}">

以上两个语句都是truepersistcookie的值为空字符串时返回的,而在cookie的值为时为false checked

如何区分以空字符串作为其值的cookie和不存在的cookie。

(注意:我可以通过为cookie分配一个非空值而不是空字符串来轻松解决此问题。)


阅读 355

收藏
2020-06-08

共1个答案

一尘不染

最接近的是检查请求cookie标头中的cookie名称。

<c:if test="${fn:contains(header.cookie, 'persist=')}">

但是,当另一个cookie名为name时foopersist,它将失败。

如果您的容器支持EL 2.2(所有Servlet 3.0容器,例如Tomcat 7,Glassfish
3等),则可以使用Map#containsKey()

<c:if test="${cookie.containsKey('persist')}">

如果没有,最好的办法是创建一个EL函数:

<c:if test="${util:mapContainsKey(cookie, 'persist')}">

public static boolean mapContainsKey(Map<String, Object> map, String key) {
    return map.containsKey(key);
}
2020-06-08