GWT:如何使用UIBinder在锚中嵌入小部件

GWT:如何使用UIBinder在锚中嵌入小部件,gwt,uibinder,Gwt,Uibinder,我想在UIBinder中使用以下内容,以便可以通过编程方式设置代码中链接的href <g:HTMLPanel> <g:Anchor ui:field="link"> <g:InlineLabel ui:field="firstName"/> <g:InlineLabel ui:field="lastName"/> </g:Anchor> </g:HTMLPanel>

我想在UIBinder中使用以下内容,以便可以通过编程方式设置代码中链接的
href

<g:HTMLPanel>
    <g:Anchor ui:field="link">
         <g:InlineLabel ui:field="firstName"/>
         <g:InlineLabel ui:field="lastName"/>
    </g:Anchor>
</g:HTMLPanel>

当我尝试这个时,我得到:

ERROR: Found widget in an HTML context Element <g:InlineLabel ui:field='firstName'> (:7). 
错误:在HTML上下文元素(:7)中找到小部件。
如何将小部件嵌入到锚点中?在此之前,我曾使用:

  <a id="myAnchor">
     etc...
  </a>

然后在我的代码中操纵DOM来设置HREF,但这很难看。有更好的方法吗?

最好使用面板(流动或水平)并向面板添加单击处理程序以模拟链接。Anchor、Button和类似的小部件不允许在它们内部使用子标记。

下面的类的行为与SimplePanel完全相同(即,您可以将小部件放入其中),但使用“a”而不是“div”。如果您需要更多的小部件,只需在其中放置另一个面板

import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.SimplePanel;

public class Link extends SimplePanel {
    public Link() {
        super(DOM.createAnchor());
    }

    private void setHref(String href) {
        getElement().setAttribute("href", href);
    }

    private String getHref() {
        return getElement().getAttribute("href");
    }

    public void setTarget(String frameName) {
        getElement().setAttribute("target", frameName);
    }
}

我最终将ClickHandler直接添加到内联标签中。否则,我需要将Flow/HorizontalPanel添加到FocusPanel中。唉,这应该更容易。我担心在我的gwt网站中避免锚元素,因为google crawler不了解我网站的结构。为什么允许Anchor/Hyperlink拥有widget会有如此大的问题?@DraškoKokić我认为GWT不是制作页面而是制作应用程序。所以它不关心搜索引擎。为什么要使用InlineLabel小部件?不能改用s或类似的元素吗?@Thomas-我使用InlineLabel是因为我需要以编程方式更新它们。InlineLabel渲染为跨距。