【问题标题】:How to retrieve an arraylist from Managed Beans in JSF如何从 JSF 中的托管 Bean 中检索数组列表
【发布时间】:2014-02-07 05:57:10
【问题描述】:

我对@9​​87654321@ 很陌生,刚刚开始阅读一些关于它的教程。我创建了一个JSP 页面和Managed Beans 类,并让应用程序成功运行。根据我的简单理解,JSF 为用户生成 JSP 文件为HTML/CSS。这是我的代码:

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 中,我怎样才能在没有HTML 标签的情况下获得managed beans 中的数组。我应该使用JSONArray 并解析它吗?这是我的JSP 代码:

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

在此代码中,objectString 正确显示为一列。我只想在 Javascriopt 中将该数组列表作为数组获取,因为我需要它来进行其他一些工作。我尝试使用 JSONArray 但遇到了问题。谁能帮我解决这个问题。非常感谢您的帮助。

【问题讨论】:

  • 很抱歉,您要使用 JSP 还是 JSF?因为您似乎正在使用 JSF 标记,所以我认为您应该创建一个 xhtml 文件并在那里添加您的 JSF 代码。 JSF 基本上是一个 servlet,它拦截 http 请求并按照特定顺序处理它们(我猜是 JSF 页面生命周期)。另一方面,JSP 是一种模板技术,由容器转换为等效的 servlet。这是两个不同的东西。
  • 当然,我们可以在这两种技术上为您提供帮助,但您似乎仍然需要告诉我们您想要做什么 :-)
  • 谢谢。好吧。实际上,我试图使用 Javascipt 创建一个 JSON 格式的变量,用于使用 D3 Javascript 显示图形。我刚刚开始学习所有这些,并希望得到那个数组。
  • 如果你打算只在服务器端提供和使用 JSON 对象(可能是因为你有一个强大的 javascript 前端),你可以只使用准系统 Servlets + JSON (GSON或 flexjson 或任何其他 JSON 库)。 JSP 和 JSF 用于花哨的 Web UI :-)
  • 我正在考虑从 JSP 调用 arraylist 并在 Javascript 函数中迭代该数组的元素。这可能吗?

标签: java javascript jsp jsf


【解决方案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 获取 JSON 数组的其他方式

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();
    }
}

假设您要部署到一个名为 Test 的应用程序,URL 是

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

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

希望对你有帮助

【讨论】:

  • 感谢您的帮助。请告诉我这段代码中的 id 字符串代表什么?提前谢谢你。
  • 实际上,id 本身在这段代码中没有用 :-) 但我的想法是向您展示您可以通过 GET 将参数传递给 JSP 文件(如 yourserver/app/page.jsp?id=666),这样您就可以使用它检索要转换为 JSON 的 java 数组。
  • 非常感谢您的帮助。请再问一个问题,当您像使用解决方案一样发送请求时,这是否一定意味着响应应该是 Json 或 XML 格式?
  • 这个决定取决于你。在这种情况下,我使用 JSONSerializer 将所有内容序列化为 JSON。如果您需要 XML,那么您必须使用 XML 序列化程序(例如xstream.codehaus.org/tutorial.html)并将“response.setContentType("application/json")”更改为“response.setContentType("application/xml")”。如果您打算使用 javascript,那么 JSON 可能是您的最佳选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多