0

我正在创建一个简单的会话对象(JsonNode)

JsonNode me = mapper.readValue(result, JsonNode.class);

HttpSession session = request.getSession(true);
session.setAttribute("user", me);

试图像这样访问它。

${user} // works print {"id":8,"name":"jones"..}
${user.id} // trows Error "Property 'id' not found on type org.codehaus.jackson.node.ObjectNode"
${user.get(0)} // nothing printed out.
${user.size()} // return 4, id,name,username,token

我将如何重新考虑我的代码以解决问题,甚至选择器?

4

1 回答 1

1

@mindas 建议的版本应该可以工作,除非您使用的是 Tomcat 7。似乎 Tomcat 7 在使用 JSP EL 调用重载方法时存在错误(请参阅此处的问题)。你用的是Tomcat 7吗?

没有打印任何内容,因为该${user.get(0)}方法用于访问数组节点的指定元素的值。你的不是一个数组节点,如果你使用${user.get("id")}你应该得到该id字段的值,除非你在 Tomcat 7 上你会得到一些错误,比如Cannot convert id of type class java.lang.String to int.

你可以尝试一个快速而肮脏的测试,${user.findValue("id")}看看你是否至少得到了一些结果,但如果你不介意我说,我认为如果你不JsonNode向 JSP 公开一个原始对象会更好,而是某种形式User POJO的getter 和 setter用于id,name和。然后您可以在 JSP 中使用,并且您对 Tomcat 没有任何问题。usernametoken${user.id}

于 2013-04-21T17:45:13.083 回答