2011-09-12 79 views
8

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

我有一个名为persist的cookie,它被设置为空字符串或“checked”。

如果想检查persist cookie是否存在。

我曾尝试以下:

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

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

的两个上述内容truepersist cookie的值是空字符串和假时,cookie的值是checked

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

(注:我可以很容易地通过指定一个非空值的cookie,而不是空字符串解决此问题。)

回答

7

最近你能得到的是在请求cookie头检查Cookie的名字。

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

但是,当有另一个名为foopersist的cookie时,它会失败。

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

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

如果你没有,最好你可以做什么是创建EL函数(更具体声明的例子可以接近的this answer底部的地方找到):

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

public static boolean mapContainsKey(Map<String, Object> map, String key) { 
    return map.containsKey(key); 
} 
+0

纠正我,如果我错了,但第二种方法似乎不适合我。我得到了与使用'' – Mike

+0

相同的结果第一种方法正常工作。我的cookies有一个应用程序前缀,所以我应该没问题。 – Mike

0

如果我理解正确的话,你要检测它不存在或者是空的。

编辑:啊。要验证它不存在,它必须为空且不为空。

<c:if test="${cookie.persist == null && cookie.persist != ''}"> 
    Cookie doesn't exist 
    </c:if> 
+0

我只是想检查cookie是否不存在。 – Mike

+1

当我使用'$ {cookie.persist == null}'时,如果cookie存在且AND设置为''(空字符串),则返回true – Mike

0

使用cookie地图检查cookie的存在与否 ${cookie["persist"] == null}

我希望工程

+2

对不起。 '$ {cookie [“persist”] == null}'给出了与$ cookie相同的结果。persist == null}' – Mike

0

如果使用Tomcat 6 +

<c:if test="${ ! empty cookie['persist']}"> 
Cookie doesn't exist 
</c:if> 
+4

该表达式不检查是否存在cookie,但是是否存在cookie值。 OP的具体问题是,当cookie存在但它包含一个空值时它也会通过。请重新阅读问题和所有答案。 – BalusC