将解析的 JSON 数据显示到窗格中 (GWT)

Displaying parsed JSON data into a pane (GWT)

我正在解析 JSON 数据,目前它可以显示在对话框中。但我无法在窗格中显示它。我是 GWT 的新手,非常感谢任何指导。我在下面提供了适当的方法。

private void jsonPane(String jsonText, final FlowPanel jsonSource) {
       jsonText = jsonText.replaceAll(">", ">");
       Label json = new HTML("<pre>" + jsonText + "</pre>", false);
       parseData();
       jsonSource.add(json);
    }

// Parsing the JSON Data
    private void parseData() {
        RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.GET, "/jsongwtexample/greet");
        try {
            requestBuilder.sendRequest(null, new RequestCallback() {

                @Override
                public void onResponseReceived(Request request, Response response) {
                    JSONValue jsonValue = JSONParser.parseStrict(response.getText());

                    JSONObject weatherObject = jsonValue.isObject();
                    JSONArray jsonArray = weatherObject.get("Weather").isArray();

                    StringBuilder builder = new StringBuilder("** TODAYS WEATHER** \n");
                    builder.append(jsonArray.get(0).isObject().get("Town").isString().stringValue()).append(" ");
                    builder.append(jsonArray.get(0).isObject().get("Weather").isString().stringValue());
                    builder.append("\n");

                    builder.toString();

                }

                @Override
                public void onError(Request request, Throwable exception) {
                    Window.alert("Some error occurred: " + exception.getMessage());

                }
            });
        } catch (RequestException e) {
            e.printStackTrace();
        }
    }

我会使用普通标签,而不是 HTML 标签,以防止恶意 HTML 注入。

private Label label = new Label();

您可以设置标签的样式以使其像 <pre> 一样显示:

public void onModuleLoad() {
    RootPanel.get().add(label);
    label.getElement().getStyle().setWhiteSpace(WhiteSpace.PRE);
}

在您的 parseData() 方法中,您需要设置标签的文本:

@Override
public void onResponseReceived(Request request, Response response) {
    ...

    label.setText(builder.toString());
}