Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不向DOM添加DIV的情况下创建GWT复合小部件?_Java_Gwt - Fatal编程技术网

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

Java 如何在不向DOM添加DIV的情况下创建GWT复合小部件?,java,gwt,Java,Gwt,如果我使用UIBinder创建一个复合小部件,然后在代码中使用我创建的小部件,它会在小部件周围插入额外的元素。有没有办法消除div或控制它是什么类型的元素 public class ExamplePanel<T> extends Composite { @UiField LabelElement inputLabel; private static ExamplePanelUiBinder uiBinder = GWT.create(ExamplePanelUiBin

如果我使用UIBinder创建一个复合小部件,然后在代码中使用我创建的小部件,它会在小部件周围插入额外的
元素。有没有办法消除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>
public类ExamplePanel扩展复合{
@UiField Labelement输入标签;
私有静态ExamplePanelUiBinder uiBinder=GWT.create(ExamplePanelUiBinder.class);
接口示例PanelUIBinder扩展UiBinder{}
公共示例面板(){
initWidget(uiBinder.createAndBindUi(this));
}
}
标签文本
编辑
看起来DIV是由
创建的。是的,DIV是由HTML面板创建的。您可以删除HTMLPanel,但必须将绑定类型更改为元素,并且您将无法再将其用作复合对象。在这种情况下,我将执行以下操作:

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>
public类示例面板扩展小部件
{
私有静态ExamplePanelUiBinder uiBinder=GWT.create(ExamplePanelUiBinder.class);
接口示例PanelUIBinder扩展UiBinder
{
}
@UiField Labelement输入标签;
公共示例面板()
{
setElement(uiBinder.createAndBindUi(this));
}
}
标签文本

是的,div是由HTML面板创建的。您可以删除HTMLPanel,但必须将绑定类型更改为元素,并且您将无法再将其用作复合对象。在这种情况下,我将执行以下操作:

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>
public类示例面板扩展小部件
{
私有静态ExamplePanelUiBinder uiBinder=GWT.create(ExamplePanelUiBinder.class);
接口示例PanelUIBinder扩展UiBinder
{
}
@UiField Labelement输入标签;
公共示例面板()
{
setElement(uiBinder.createAndBindUi(this));
}
}
标签文本

部分答案 显然,
会生成div,并且可以使用tag属性进行控制:

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

学分:


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

部分答案 显然,
会生成div,并且可以使用tag属性进行控制:

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

学分:


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

为了这个问题,我简化了我的示例,而不仅仅是一个标签,我有几个字段,如果不是复合的,我还能有几个字段吗?只要你不使用小部件(只使用com.google.gwt.dom.client.*元素),是的;显然,您仍然需要一个容器元素;你可以把你想要的所有HTML都放在那里,你只是不能添加一个小部件,这就是HTML面板的作用,因为它处理小部件的逻辑绑定。如果您自己处理逻辑绑定,您可以将小部件的元素注入html,但实际上您将重写许多HTMLPanel绑定逻辑。为了解决这个问题,我简化了我的示例,而不仅仅是一个标签,我有几个字段,如果不是复合的,我还能有几个字段吗?只要你不使用小部件(只使用com.google.gwt.dom.client.*元素),是的;显然,您仍然需要一个容器元素;你可以把你想要的所有HTML都放在那里,你只是不能添加一个小部件,这就是HTML面板的作用,因为它处理小部件的逻辑绑定。如果您自己处理逻辑绑定,您可以将小部件的元素注入到html中,但实际上您将重写许多HTMLPanel绑定逻辑。