2011-05-26 47 views
1

我的JSP,被在背景下,它需要做一些處理,如創建表通過了的JSONObject等訪問的JSONObject在JSP

但是,當我嘗試訪問該對象的成員,提供了以下錯誤 - (在此對象的關鍵之一的名稱是確定)

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代碼訪問它看起來是這樣的 -

<%@標籤庫的URI =「HTTP:// java.sun.com/jsp/jstl/core「prefix =」c「%>

<c:if test="${serviceOutput.ok}"> 
    <c:if test="${serviceOutput.ret.proposalCount} > 0"> 
..... 

任何人都可以請建議如何解決這個問題,併成功訪問此對象的所有成員?

回答

1

EL只理解JavabeansMap s。您需要讓預處理servlet將JSONObject的每個項目轉換爲完全可用的Javabean,該Javabean具有可用於EL的getter方法或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); 

這樣EL表達式就像${serviceMap.ok}會工作。

+0

有沒有辦法讀取這個沒有EL的JSON對象,在jsp中使用其他方式? – kshtjsnghl 2011-05-26 18:11:41

+0

是的,使用老式的* scriptlets *這將完全打破MVC的思想。我寧願在控制器方面解決它比在視圖方面。 – BalusC 2011-05-26 18:12:59

1

現在可以採用的其他選項是使用不同的JSON解析庫,如json-simple(http://code.google.com/p/json-simple/)。該庫中的JSONObject擴展了HashMap,JSONArray擴展了ArrayList,因此EL應該與它們一起工作。然後你不必改變你的jstl或做額外的解析。