将解析的 JSON 数据显示到窗格中 (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());
}

最新更新