2014-01-17 61 views
0

我對JSF頗爲陌生,剛開始閱讀一些關於它的教程。我創建了一個JSP頁面和Managed Beans類,並使應用程序成功運行。基於我的簡單理解,JSF爲用戶生成了一個名爲HTML/CSS的JSP文件。這裏是我的代碼:如何從JSF中的託管Bean檢索數組列表

public calss Beans 
{ 
private ArrayList<String> objectString = new ArrayList<String>(); 
private JSONObject obj = new JSONObject(); 
private JSONArray jsonArr = new JSONArray(); 

// Fill the two arrays 
public void fill() 
{ 
} 
public void setJSON(JSONArray jsonArr) 
{ 
    this.jsonArr = jsonArr; 
} 

public JSONArray getJSON() 
{ 
    return jsonArr; 
} 
public void setObjectString(ArrayList<String> objectString) 
{ 
    this.objectString = objectString; 
} 

public ArrayList<String> getobjectString() 
{ 
    return objectString; 
} 
} 

我的問題是,在JSP,我怎樣才能在managed beans陣列,因爲它們無需HTML標記。我應該使用JSONArray並解析它嗎?這裏是我的JSP代碼:

<h:dataTable value="#{beans.objectString}" var="object"> 
     <h:column> 
      <h:outputText value="#{object}"/> 
     </h:column> 
</h:dataTable> 

在這段代碼中,objectString正確地顯示爲一列。我只想將arraylist作爲Javascriopt中的一個數組,因爲我需要它來完成其他一些工作。我試圖使用JSONArray,但得到了問題。任何人都可以請幫我解決這個問題。非常感謝您的幫助。

+0

我很抱歉,但你要使用JSP或JSF?因爲您似乎在使用JSF代碼,所以我認爲您應該創建一個xhtml文件並在其中添加您的JSF代碼。 JSF基本上是一個攔截http請求並按照特定順序處理它們的JSF頁面(我猜JSF頁面生命週期)。另一方面,JSP是由容器轉換爲等效的servlet的模板技術。這是兩件不同的事情。 – 2014-01-17 19:06:48

+0

當然,我們可以幫助您使用這兩種技術,但似乎您仍然需要告訴我們您要做什麼:-) – 2014-01-17 19:07:49

+0

謝謝。好。其實我試圖用Javascipt創建一個JSON格式的變量來使用D3 Javascript顯示圖形。我剛開始學習所有這些,並希望按原樣獲得該陣列。 – user2864315

回答

1

一個JSP例子 - JSONExample.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<%@ page import="mypackage.*" %> 
<%@ page import="java.util.*" %> 
<%@ page import="flexjson.JSONSerializer.*" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
</head> 
<body> 

<% 
    String id = request.getParameter("id"); 
    String json = new JsonArrayGenerator(id).getJsonArray(); 
%> 

<script> 
var array = <%=json%>; 
alert(array.toString()); 
</script> 
</body> 
</html> 

發電機

package mypackage; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.List; 

import flexjson.JSONSerializer; 


public class JsonArrayGenerator { 
    private String id; 

    public JsonArrayGenerator(String id) { 
     super(); 
     this.id = id; 
    } 

    public String getJsonArray(){ 
     //some list of things 
     List<Object> list = new ArrayList<Object>(); 
     list.add(1); 
     list.add(this.id); 
     list.add(new Date()); 
     list.add("Hello"); 

     //now serialize 
     JSONSerializer serializer = new JSONSerializer(); 
     String json = serializer.serialize(list); 

     return json; 
    } 
} 

或其他方式使用servlet

package mypackage; 


import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.List; 

import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import flexjson.JSONSerializer; 

@WebServlet("/JSONExample") 
public class JSONExample extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    public JSONExample() { 
    super(); 
    } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     String id = request.getParameter("id"); 

     //use the id to retrieve the list you want 

     //some list of things 
     List<Object> list = new ArrayList<Object>(); 
     list.add(1); 
     list.add(id); 
     list.add(new Date()); 
     list.add("Hello"); 

     //now serialize 
     JSONSerializer serializer = new JSONSerializer(); 
     String json = serializer.serialize(list); 
     response.setContentType("application/json"); 

     //print it 
     PrintWriter out = response.getWriter(); 
     out.write(json); 
     out.flush(); 
    } 
} 

假設你得到一個JSON數組將部署到名爲Test的應用程序,URL爲

http://yourserver/Test/JSONExample (servlet) 

http://yourserver/Test/JSONExample.jsp (JSP) 

我希望它能幫助

+0

謝謝你的幫助。可否請你告訴我這個代碼中的id字符串代表什麼?先謝謝你。 – user2864315

+0

實際上,id本身在這段代碼中沒用:-)但我的想法是告訴你可以通過GET將參數傳遞給JSP文件(如http://yourserver/app/page.jsp?id = 666 ),所以你可以用它來檢索你想要轉換成JSON的java數組。 – 2014-01-18 00:26:53

+0

非常感謝您的協助。還有一個問題,當您發送像您對解決方案所做的請求時,這是否意味着響應應該採用Json還是XML格式? – user2864315