I think you'll have to do some debugging to find the answer, but browsing at your code I see one odd thing. You are setting the same attribute name at both request and session scope. EL resolution will only find one of them and I'm pretty sure it will find the one at request scope.
request.getSession().setAttribute("userSessionInfo", userSession); request.setAttribute("userSessionInfo", userSession);
But since you go into the loop, apparently you are getting *some* EL-resolving. If you view the source, the c:param is not resolved either?