如何在不向DOM添加DIV的情况下创建GWT Composite小部件?

时间:2012-01-11 23:53:17

标签: java gwt

如果我使用UIBinder创建一个复合小部件,然后在代码中使用我创建的小部件,它会在我的小部件周围插入额外的<div>元素。有没有办法消除div或控制它是什么类型的元素?

public class ExamplePanel<T> extends Composite {
    @UiField LabelElement inputLabel;
    private static ExamplePanelUiBinder uiBinder = GWT.create(ExamplePanelUiBinder.class);
    interface ExamplePanelUiBinder extends UiBinder<Widget, ExamplePanel> { }

    public ExamplePanel() {
        initWidget(uiBinder.createAndBindUi(this));
    }
}

<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui">
    <g:HTMLPanel>
            <label ui:field="inputLabel">Label text</label>
    </g:HTMLPanel>
</ui:UiBinder>

修改 似乎DIV是由<g:HTMLPanel>

创建的

2 个答案:

答案 0 :(得分:3)

是的,div由HTML面板创建。您可以删除HTMLPanel,但必须将绑定类型更改为Element,您将无法再将其用作复合。在这种情况下,我会做以下事情:

public class ExamplePanel extends Widget
{
    private static ExamplePanelUiBinder uiBinder = GWT.create(ExamplePanelUiBinder.class);

    interface ExamplePanelUiBinder extends UiBinder<Element, ExamplePanel>
    {
    }

    @UiField LabelElement inputLabel;

    public ExamplePanel()
    {
        setElement(uiBinder.createAndBindUi(this));
    }
}

<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder">
    <label ui:field="inputLabel">Label text</label>
</ui:UiBinder>

答案 1 :(得分:1)

部分答案 显然<g:HTMLPanel>生成div,可以使用tag属性控制:

<g:HTMLPanel tag="span">
    <!-- your stuff -->
</g:HTMLPanel>

信用:Trying to get UIBinder to give me a span not a div

这并不能完全解决我的需求,因为我想要消除DIV(使用HTMLPanel的替代?)或能够与它交互(添加类等)。