【问题标题】:converting ArraList to JSON (in Java) and accessing it with Javascript将 ArrayList 转换为 JSON(在 Java 中)并使用 Javascript 访问它
【发布时间】:2014-11-25 16:21:18
【问题描述】:

该项目的目的是选择图像的一个区域,将该区域发送到数据库,检索该选定区域并绘制选定图像的区域。我有一个充满坐标行的数据库。所以我做了一个对象——Area,用坐标行来表示那个表。 ViewArea 有四个值:int x1、int x2、int y1 和 int y2。

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

}

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

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

    }



}

到目前为止一切顺利.. 现在我们转到 js。在 JS 中,我创建了一个函数,它接受四个值,然后我用它们在画布上绘制图像,这是正在使用的图像。

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';
}

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

【问题讨论】:

    标签: java javascript jquery json jsf


    【解决方案1】:

    从 js 向服务器请求 JSON。 在服务器端,将 JSON 对象转换为纯字符串,返回内容类型为 application/json。

    您应该可以使用正确的 JSON

    【讨论】:

    • 您好,感谢您的回复。一个一个的意思还是填充列表然后转换?
    • 是的,应该这样做
    • 您没有指定使用哪个选项。
    • 是的,更具体地说,我使用的是 primefaces 5.1 和 jsf2.2
    • 如果你使用 bean 方法将 JSONArray 分配给 js var,它应该可以正常工作
    【解决方案2】:

    您可能需要创建一个 REST 服务端点并将数组内容公开为 JSON。那么您应该能够从浏览器中检索 JSON 并使用它。 spring 文档https://spring.io/guides/gs/rest-service

    中给出了创建此类端点的简单方法

    【讨论】:

    • 感谢您的回复!当然,这是一个有前途的解决方案。但这似乎没有必要,因为我的新手头脑有一种直觉,我可以在不添加额外依赖项和所有这些的情况下解决这个问题。虽然我确实将它添加到我的解决方案中,但只是试图找到最佳的解决方案。
    • 我假设您正在编写 Web 应用程序。至少您需要公开一个 servlet 控制器并将 JSON 字符串(jsonAreaList.toString() 将给您字符串)写入 http 响应。否则,您在服务器中所做的一切将根本无法在浏览器中使用。
    猜你喜欢
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 2017-05-24
    • 2022-10-17
    • 1970-01-01
    • 2021-06-28
    相关资源
    最近更新 更多