如何解决在jsp中访问JSONObject
| 我的JSP在上下文中传递了一个JSONObject,它需要对其进行一些处理,例如创建表等。 但是,当我尝试访问该对象的成员时,出现以下错误- (此对象中的键之一的名称可以) Servlet.service() for servlet jsp threw exception { javax.servlet.jsp.el.ELException:
Unable to find a value for \"ok\" in object of class \"org.json.JSONObject\" using operator \".\"
JSP代码访问它看起来像这样-
<%@ taglib uri = \“ http://java.sun.com/jsp/jstl/core \”前缀= \“ c \”%>
<c:if test=\"${serviceOutput.ok}\">
<c:if test=\"${serviceOutput.ret.proposalCount} > 0\">
.....
有人可以建议我如何解决此问题并成功访问该对象的所有成员吗?
解决方法
EL仅理解Javabeans和
Map
s。您需要让预处理Servlet将JSONObject
的每个项目转换为具有可在EL中使用的getter方法的功能齐全的Javabean或Map
。
这是将其转换为Map
的示例:
Map<String,Object> serviceMap = new HashMap<String,Object>();
serviceMap.put(\"ok\",serviceOutput.getBoolean(\"ok\"));
serviceMap.put(\"foo\",serviceOutput.getString(\"foo\"));
// ...
request.setAttribute(\"serviceMap\",serviceMap);
request.getRequestDispatcher(\"/WEB-INF/page.jsp\").forward(request,response);
这样,像“ 7”之类的EL表达式将起作用。
,现在可以采用的另一个选项是使用其他JSON解析库,例如json-simple(http://code.google.com/p/json-simple/)。该库中的JSONObject扩展了HashMap,而JSONArray扩展了ArrayList,因此EL应该使用它们。然后,您将不必更改jstl或进行额外的解析。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。