我的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”prefix =“c”%>
<c:if test="${serviceOutput.ok}">
<c:if test="${serviceOutput.ret.proposalCount} > 0">
.....
任何人都可以建议我如何解决此问题并成功访问此对象的所有成员?
答案 0 :(得分:1)
EL仅了解Javabeans和Map
。您需要让预处理servlet将JSONObject
的每个项目转换为具有可在EL中使用的getter方法或Map
的完整Javabean。
以下是将其转换为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);
这样,像${serviceMap.ok}
这样的EL表达式就可以了。
答案 1 :(得分:1)
现在可以采用的另一个选项是使用不同的JSON解析库,例如json-simple(http://code.google.com/p/json-simple/)。此库中的JSONObject扩展了HashMap,JSONArray扩展了一个ArrayList,因此EL应该使用它们。然后,您不必更改您的jstl或进行额外的解析。