将ArraList转换为JSON(Java)并使用Javascript访问它

将ArraList转换为JSON(Java)并使用Javascript访问它,java,javascript,jquery,json,jsf,Java,Javascript,Jquery,Json,Jsf,此项目的目的是选择图像的一个区域,将该区域发送到db,检索该选定区域并绘制选定图像的区域。我有一个数据库,里面有一行行坐标。所以我制作了一个对象区域,用坐标行来表示这个表。ViewArea有四个值:intx1、intx2、inty1和inty2 public class ViewArea extends Area { public ViewArea(int x1, int y1, int x2, int y2) { super(x1, x2, y1, y2);

此项目的目的是选择图像的一个区域,将该区域发送到db,检索该选定区域并绘制选定图像的区域。我有一个数据库,里面有一行行坐标。所以我制作了一个对象区域,用坐标行来表示这个表。ViewArea有四个值:intx1、intx2、inty1和inty2

public class ViewArea extends Area
{
    public ViewArea(int x1, int y1, int x2, int y2)
    {
        super(x1, x2, y1, y2);
    }

}
由于行的数量可能会越来越多,这意味着区域对象的数量也会越来越多,因此我创建了一个带有列表的类AreaInputView。在类的init()中,我填充列表并将其转换为JSONArray(如谷歌搜索时的示例所示)


我的问题是,我无法从javascript访问JSON对象,因为javascript是客户端,而JSON是java,java是服务器端。关键是迭代JSON对象,并为每个对象应用js函数。我可以选择将数据写入一个.js文件中,这样我就可以在那里访问它,但必须有办法解决这个问题。有什么建议吗?

您可能需要创建一个REST服务端点,并将数组内容公开为JSON。然后您应该能够从浏览器中检索JSON并使用它。spring文档中给出了创建这种端点的简单方法,从js向服务器请求JSON。 在服务器端,将JSON对象转换为纯字符串,并返回内容类型为application/JSON


您应该有合适的JSON可供使用

感谢您的回复!当然,这是一个有希望的解决方案。但这似乎是不必要的,因为我的新手主管有一种直觉,即我可以在不增加额外依赖项的情况下解决这个问题。虽然我确实将它添加到了我的解决方案中,但我只是想找到最理想的解决方案。我假设您正在编写web应用程序。至少您需要公开一个servlet控制器并将JSON字符串(jsonareality.toString()将为您提供字符串)写入http响应。否则,您在服务器上所做的一切将无法在浏览器中使用。嘿,谢谢您的回复。是的,你没有指定要使用哪个选项。是的,更具体地说,我使用primefaces 5.1和jsf2.2。如果你使用bean方法将JSONArray分配给js变量,它应该可以正常工作
@ManagedBean
@ApplicationScoped
public class AreaInputView implements Serializable
{

    /**
     * 
     */
    private static final long serialVersionUID = -3957666682646196671L;

    MyDatabase db = new MyDatabase();

    private List<ViewArea> areaList;
    private JSONArray jsonAreaList;

    public List<ViewArea> getAreaList()
    {
        return areaList;
    }


    @PostConstruct
    public void init()
    {
        this.areaList = new ArrayList<ViewArea>();
        populateList();
        this.jsonAreaList = new JSONArray(areaList);
    }



    public JSONArray getJsonAreaList()
    {
        return jsonAreaList;
    }

    public void populateList()
    {
        db.openDatabase();

        try
        {
            db.pstmt = db.con.prepareStatement("SELECT * FROM area");
            ResultSet rs = db.pstmt.executeQuery();

            while (rs.next())
            {
                areaList.add(new ViewArea(rs.getInt("X1"), rs.getInt("X2"), rs.getInt("Y1"), rs
                        .getInt("Y2")));
            }
        }
        catch (SQLException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }



}
function viewInput(dx1,dy1,dx2,dy2) {
    var canvas = document.getElementById('home:tempImg');
    var context = canvas.getContext('2d');
    var imageObj = new Image();

    imageObj.onload = function() {
      context.drawImage(imageObj, dx1, dy1,dx2-dx1,dy2-dy1);
    };
    imageObj.src = 'images/selected.png';
}