如何使用JSTL读取三个cookie的值?

时间:2014-02-27 05:11:41

标签: jsp cookies jstl

我有三个cookie,其中两个用于保存用户的详细信息(名称和ID),另一个用于保留用户的类型。我需要根据从其中一个cookie中检索到的用户类型显示特定消息。

我有以下工作代码,但它有点复杂,我想知道是否有任何有效的方法。

<c:forEach items="${cookie}" var="IdCookie">
     <c:if test="${IdCookie.key == 'UserID'}">   << if UserID cookie is found

            <c:forEach items="${cookie}" var="nameCookie">

               <c:if test="${nameCookie.key == 'User'}"> << if User cookie is found

                      <p>${IdCookie.value.value} &nbsp; ${nameCookie.value.value}</p>
                      <c:forEach items="${cookie}" var="typeCookie">                                     
                                <c:if test="${typeCookie.key == 'Type'}"> << if Type cookie is found

                                     <c:if test="${typeCookie.value == 'One'}">
                                         <p>,Your type is one </p>
                                     </c:if>
                                     <c:if test="${typeCookie.value == '0'}">
                                         <p>,Your type is NOT one </p>
                                      </c:if>

                                 </c:if>

                      </c:forEach>
               </c:if>

             </c:forEach>
     </c:if>

 </c:forEach>

输出

   Cookies' values >> 1 Alex 0
   output >> 1 Alex,Your type is Not one 
   Cookies' values >>  1 Jack One
   output >> 1 Jack,Your type is one 

1 个答案:

答案 0 :(得分:1)

请参阅Getting cookie in JSP

你可以通过这种方式简化:

<p>${cookie['UserId'].value} ${cookie['User'].value}, 
<c:if test="${cookie['Type'].value == 'One'}">
  ,Your type is one
</c:if>
<c:if test="${cookie['Type'].value == '0'}">
  ,Your type is NOT one
</c:if></p>

通过使用三元运算符(?:)使其更加简单,这对读者来说是一个练习:)。

如果您想先检查Cookie是否存在,请参阅以下内容:Check if Cookie exists with JSP EL

所以你可以这样做:

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

当这变得复杂时,我建议将它包装在一个bean中。