While retrieving cookies I need to use:
<c:forEach items="${cookie}" var="currentCookie">
${currentCookie.value.name} </br>
</c:forEach>
But, while using custom arrays, why we need to skip the .value function?
<c:forEach items="${myList}" var="myList">
${myList.name} </br>
</c:forEach>
Cookie contains a .getValue function() which returns the content of the cookie in string format, so how does using currentCookie.value.name work?
The ${cookie}
points to a Map<String, Cookie>
with the cookie name as map key and the Cookie
object as map value. Every iteration over a Map
in <c:forEach>
gives you a Map.Entry
back which in turn has getKey()
and getValue()
methods. Your confusion is that the Cookie
object has in turn also a getValue()
method.
<c:forEach items="${cookie}" var="currentCookie">
Cookie name as map entry key: ${currentCookie.key}<br/>
Cookie object as map entry value: ${currentCookie.value}<br/>
Name property of Cookie object: ${currentCookie.value.name}<br/>
Value property of Cookie object: ${currentCookie.value.value}<br/>
</c:forEach>
It's a Map<String, Cookie>
because it allows you easy direct access to cookie value when you already know the name beforehand. The below example assumes it to be cookieName
:
${cookie.cookieName.value}
Your list example is by the way invalid. The var
should not refer the same name as the list itself.