2014-01-17 34 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