如何从session |作为JsonNode访问$ {user.get()}

时间:2013-04-20 08:32:54

标签: java json web-services servlets el

我正在创建一个简单的会话对象(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

如何解决我的代码以解决问题,甚至是选择器?

1 个答案:

答案 0 :(得分:1)

@mindas建议的版本应该可以工作,除非您使用的是Tomcat 7.看起来Tomcat 7在使用JSP EL(see an issue here)调用重载方法时有一个错误。你在使用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包含idnameusername和{{1}的getter和setter相反。然后,您可以在JSP中使用token,而Tomcat没有问题。