将Widget插入纯HTML代码中

时间:2013-03-15 18:05:03

标签: gwt web-applications servlets

由于我要显示的页面包含大量文本,我想在自己的文本文件中预先格式化,我会执行以下操作:

execute: onModuleLoad()
         - make an Async call to the server and load 
           the text files which are html-formatted

代码如下所示:

homeAsync.load(new AsyncCallback<String>() {
  public void onFailure(Throwable caught) {
    contentHome.add(new HTML("<h1>FAIL</h1>something went wrong"));
    caught.printStackTrace();
  }

  public void onSuccess(String result) {
    contentHome.getElement().setId("inner");
    contentHome.add(new HTML(result));
    //RootPanel.get("content").add(new HTML(result));
  }
});

现在..在这些文本文件中是一些自定义标签:

<!graph>

我想用一些GWT小部件替换它。我的问题是,我只是不知道如何轻松实现这一目标。

我可以做一些类似的工作:

- load text part 1 (async call)
- insert graph for part 1
- load text part 2 (asynca call)
- insert foobar
- and so on ..

我甚至不知道这是否会奏效但说实话......那太简单了^^

对我有什么建议吗?

3 个答案:

答案 0 :(得分:0)

了解part1part2两个可以使事情变得清晰。

是的,您可以将所有HTML内容呈现给widget(但是以安全的方式,是在谈论SafeHtml)。

并且避免两次RPC调用从DB获取字符串。如果您知道part1part2一次加载字符串(使用标识符并将其拆分为{{1} }})。

答案 1 :(得分:0)

使用HTMLPanel作为模板。

一个例子:

String html = "<div id='one' style='border:3px dotted blue;'></div>"
    + "<div id='two' style='border:3px dotted green;'></div>";
HTMLPanel panel = new HTMLPanel(html);
panel.setSize("200px", "120px");
panel.addStyleName("demo-panel");
panel.add(new Button("Do Nothing"), "one");
panel.add(new TextBox(), "two");
RootPanel.get("demo").add(panel);

答案 2 :(得分:0)

您还可以使用以下方法:

Label w = new Label();
w.getElement().setInnerHTML(html);
w.getElement().setInnerSafeHtml(safeHtml);