我试图让控制器将属性轨道设置为httpSession,但是${track}在.jsp中没有给我任何东西.另一方面,如果我将它设置为servletContext,${track}会给我值.这似乎不对.你能否指出在.jsp(使用jstl)和控制器(.java)之间传递属性的方向?提前致谢.
它将在引擎盖下使用JspContext#findAttribute()
来查找属性.链接的javadoc提到以下内容:
Searches for the named attribute in page, request, session (if valid), and application scope(s) in order and returns the value associated or null.
因此,它将返回在按页,请求,会话和应用程序(servletcontext)范围的顺序搜索之后找到的第一个非空值.
如果您在多个范围中具有相同名称的属性和/或您希望从特定范围获取属性,则可以通过${pageScope},${requestScope},$提供的属性映射来访问它. {sessionScope}和/或${applicationScope}.例如.
${requestScope.track}
也可以看看:
> Our EL wiki page
> How to access objects in EL expression language ${}
回到实际问题:如果您在访问会话范围属性时遇到问题,那么它只能意味着JSP没有使用与servlet使用的相同的会话.您可以通过在servlet中打印会话ID来调试它,如下所示
System.out.println(session.getId());
并在JSP中
${pageContext.session.id}
两者都应该打印相同.如果没有,那么肯定不会共享同一个会话.会话是域,上下文和cookie依赖.
您只需打印${sessionScope}即可显示所有可用的会话属性.它将显示格式化的字符串,如AbstractMap#toString()
所述,包含所有会话属性.
${sessionScope}