Your question is very intersting and after a few investigation I found out how to solve it. Actually to answer the question correctly we have to understand how the Boolean.valueOf(
String) method is supposed to work (this is covered in
SCJP exam). This method returns false if the argument is
null or anything different from
true (the uppercase or lowercase makes no difference). As the argument of the EL
not operator in your code has to be a boolean, a type coercion is performed. The
map.c argument resolves to null, because
map is actually a scripting variable, not corresponding to a scope variable. Thus the negation resolves to true.
[ December 08, 2008: Message edited by: Matteo Palmieri ]