java - 如何从 JSF 中的托管 Bean 检索数组列表

标签 java javascript jsp jsf

我对 JSF 还很陌生,刚刚开始阅读一些有关它的教程。我创建了一个 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标记的情况下获取托管bean中的数组。我应该使用 JSONArray 并解析它吗?这是我的 JSP 代码:

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

在此代码中,objectString 正确显示为一列。我只想将该 arraylist 作为 JavaScript 中的数组获取,因为我需要它来完成其他一些工作。我尝试使用 JSONArray 但遇到了问题。有人可以帮我解决这个问题吗?非常感谢您的帮助。

最佳答案

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)

希望对你有帮助

关于java - 如何从 JSF 中的托管 Bean 检索数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21193769/

相关文章:

java - 为什么 Spring MVC 4 提交按钮不触发 post 方法

java - 尽管没有在任何地方清除,但构造函数中的 ArrayList 分配的数据正在丢失其数据

java - Spring REST 文档 : how to replace parameters

javascript - 范围 slider 开始和结束处的圆圈

javascript - 如何使用 Backbone.PageableCollection 和自定义 Express 路由处理分页

java - Spring MVC Controller 已达到,但我仍然得到 404

java - 不带 'ln' 的字符串的 System.out.print

javascript - 使用 KO 禁用\启用 Bootbox 按钮

java - Eclipse 不适用于 JSP

regex - 服务器返回 JSP 页面时如何删除注释?