Java 如何从会话|${user.get()}以JsonNode身份访问
我正在创建一个简单的会话对象(JsonNode) 他们试图这样访问它Java 如何从会话|${user.get()}以JsonNode身份访问,java,json,web-services,servlets,el,Java,Json,Web Services,Servlets,El,我正在创建一个简单的会话对象(JsonNode) 他们试图这样访问它 ${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
${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
我该如何重新考虑我的代码来修复问题,甚至选择器?除非您使用的是Tomcat 7,否则@mindas建议的版本应该可以工作。Tomcat7在使用jspel()调用重载方法时似乎有一个bug。你在用Tomcat7吗
${user.get(0)}
没有打印任何内容,因为该方法用于访问数组节点的指定元素的值。你的不是数组节点,如果你使用${user.get(“id”)}
你应该得到id
字段的值,除非你在Tomcat 7上,在那里你会得到一些错误,比如不能将class java.lang.String类型的id转换为int
您可以使用
${user.findValue(“id”)}
尝试一个快速而肮脏的测试,看看您是否至少得到了一些结果,但是如果您不介意我说,我认为如果您不向JSP公开像JsonNode
这样的原始对象,而是某种user
,以及id
的getter和setter,会更好,名称
,用户名
和令牌
。然后,您可以在JSP中使用${user.id}
,您将不会对Tomcat有任何问题。关于${user.get('id')}
?@mindas不,它似乎不起作用。是的,我正在使用Tomcat 7,是的,我得到“无法将类java.lang.String的id转换为int”错误,我该如何着手修复它?哦,顺便说一下,json对象非常安全,它有id、名称、令牌、没有密码或其他任何东西,我不明白为什么要使用用户obj?@Jessica:我不是说用用户对象替换JsonNode的安全性。我说的是你访问它的方式。EL从第一天起就知道如何在POJOs上与Getter合作。在JSP2.2中添加了对对象的调用方法,Tomcat为重载方法在对象上添加了chockes。JsonNode的字段没有getter,您需要调用一个重载方法来获取字段。从这里开始你的问题!如果将其替换为POJO,则使用${user.id}可以解决问题。如果您不想仅仅为此创建类,那么可以将JsonNodes包装在映射中,并使用${user[“id”]}。
${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