你可能想看看這個SO Q&A。
的理念是:
- 您創建一個服務器調用(例如,RPC)來獲取你的HTML模板爲一個字符串。
- 您可以創建一個相應的HTMLPanel,它知道如何將動態元素附加到您在構造函數中傳遞的html模板中。
- 您可以將此新構建的HTMLPanel添加到您想要的頁面根面板中。
On this SO你可以找到一個面板模板代碼,可以幫助你。其中的版本沒有「動態」html源代碼,而是在ClientBundle中進行了硬編碼。但它很容易擴展,因此HTML源文件是動態的,只需添加一個construtor,如:
public HtmlPanelBase(final String htmlContentAsText)
其中htmlContentAsText
是模板HTML字符串從您的服務器如下:
public class HtmlPanelBase extends Composite
{
private String _dynPostfix = "";
protected final String id(final String staticId) { return staticId + _dynPostfix; }
private final String wrapId(final String id) { return "id=\"" + id + "\""; }
private final String wrapDynId(final String refId) { return wrapId(id(refId)); }
private String _htmlContentAsText = null;
protected String getHtmlContentAsText() { return _htmlContentAsText; }
private ArrayList<String> _idList = null;
protected HTMLPanel _holder = null;
private HTMLPanel createHtmlPanel(final boolean defineGloballyUniqueIds)
{
// HTML panel text containing the reference id's.
if (defineGloballyUniqueIds)
{
// Replace the reference id's with dynamic/unique id's.
for (String refId : _idList)
_htmlContentAsText = _htmlContentAsText.replace(wrapId(refId), wrapDynId(refId));
}
// Return the HTMLPanel containing the globally unique id's.
return new HTMLPanel(_htmlContentAsText);
}
public HtmlPanelBase(final String htmlContentAsText, final ArrayList<String> idList, final boolean defineGloballyUniqueIds)
{
_htmlContentAsText = htmlContentAsText;
_idList = idList;
this.setup(defineGloballyUniqueIds);
super.initWidget(_holder);
}
public HtmlPanelBase(final String htmlContentAsText)
{
this(htmlContentAsText, null, false);
}
private void setup(final boolean defineGloballyUniqueIds)
{
if (defineGloballyUniqueIds)
_dynPostfix = "_" + UUID.uuid().replace("-", "_");
_holder = createHtmlPanel(defineGloballyUniqueIds);
}
}
要使用,取你的htmlContentAsText在服務器上(可能取決於區域設置),在成功實例化上述基本模板的派生類時,在構造函數中傳遞提取的htmlContentAsText,並在其中添加所有的邏輯修改或添加基本html - 例如,添加處理程序對用戶操作的響應。
當然,請分享代碼。 –
@ClickUpvote完成,添加了示例代碼。 – Patrick
你能解釋一下這段代碼與使用普通的HTMLPanel不同嗎?另外,我沒有看到改變這個面板的html代碼的方法,你能澄清一下嗎? –