在GWT应用程序中外部化HTML的最佳方法?

Lim*_*tem 19 html java gwt

在GWT应用程序中外部化大量HTML的最佳方法是什么?我们有一个相当复杂的GWT应用程序,大约30"页"; 每个页面底部都有一个指南,它是HTML标记的几个段落.我想外化HTML,以便它可以保持尽可能"未转义".

我知道并了解如何在GWT中使用属性文件 ; 这肯定比在Java类中嵌入内容更好,但对于HTML仍然有点丑陋(你需要反驳所有内容,以及转义引号等)

通常这是你要放在JSP中的那种东西,但我没有看到任何与GWT相同的东西.我正在考虑编写一个小部件,它只是从服务器上的html文件中获取内容,然后将文本添加到HTML小部件中.但似乎应该有一种更简单的方法.

小智 22

我在类似的设置中使用过ClientBundle.我已经创建了一个包my.resources并将我的HTML文档和以下类放在那里:

package my.resources;

import com.google.gwt.core.client.GWT;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.TextResource;

public interface MyHtmlResources extends ClientBundle {
 public static final MyHtmlResources INSTANCE = GWT.create(MyHtmlResources.class);

 @Source("intro.html")
 public TextResource getIntroHtml();

}
Run Code Online (Sandbox Code Playgroud)

然后我通过从GWT客户端代码中调用以下内容来获取该文件的内容:

HTML htmlPanel = new HTML();
String html = MyHtmlResources.INSTANCE.getIntroHtml().getText();
htmlPanel.setHTML(html);
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅http://code.google.com/webtoolkit/doc/latest/DevGuideClientBundle.html.


Bor*_*vić 7

您可以使用一些模板机制.试试FreeMarkerVelocity模板.您将在文件中使用HTML,这些文件将由模板库检索.这些文件可以使用适当的扩展名进行命名,例如.html,.css,.js可以单独使用.

  • 虽然FreeMarker和Velocity是在服务器端工作的很好的工具,但我不认为它在GWT客户端环境中是一个很好的解决方案.GWT对可以在客户端上执行的Java代码施加限制,并且传统的模板库(如您提到的那些)将无法运行. (3认同)

Mig*_*ing 5

我会说你通过Frame加载外部html .

Frame frame = new Frame();
frame.setUrl(GWT.getModuleBase() + getCurrentPageHelp());
add(frame);
Run Code Online (Sandbox Code Playgroud)

您可以为getCurrentPageHelp()安排一些约定或查找以返回适当的路径(例如:/manuals/myPage/help.html)

这是一个框架的例子.


And*_*ate 5

在GWT 2.0中,您可以使用UiBinder来完成此操作.

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'>
  <div>
    Hello, <span ui:field='nameSpan’/>, this is just good ‘ol HTML.
  </div>
</ui:UiBinder>
Run Code Online (Sandbox Code Playgroud)

这些文件与Java代码分开,可以编辑为HTML.它们还提供与GWT小部件的集成,以便您可以从GWT代码轻松访问HTML中的元素.