GWT小部件ID和HTML标准

GWT小部件ID和HTML标准,gwt,web,Gwt,Web,我在GWT项目中有一个自定义小部件OrderItem。这个小部件有一个文本框。我把它的id设置为Navid。但是如果我在一个面板中创建OrderItem的多个实例呢?然后会重复id。这会使html无效 如何为文本框分配唯一的id?通常,GWT小部件会自动生成自己的id,而您通常不会担心id是什么。当您说您正在设置文本框的ID时,我假设您正在调用类似myTextBox.getElement.setIdNavid的东西 根据您的用例,我可以想到两种简单的方法。HTMLPanel类上有一个静态crea

我在GWT项目中有一个自定义小部件OrderItem。这个小部件有一个文本框。我把它的id设置为Navid。但是如果我在一个面板中创建OrderItem的多个实例呢?然后会重复id。这会使html无效


如何为文本框分配唯一的id?

通常,GWT小部件会自动生成自己的id,而您通常不会担心id是什么。当您说您正在设置文本框的ID时,我假设您正在调用类似myTextBox.getElement.setIdNavid的东西

根据您的用例,我可以想到两种简单的方法。HTMLPanel类上有一个静态createUniqueId方法,您可以自己使用,也可以轻松创建一个唯一的id,比如myTextBox.GetElement.setIdNavid-+HTMLPanel.createUniqueId。唯一的问题是生成的ID不是确定性的

另一种常用方法是基于父窗口小部件的ID生成ID。myTextBox.getElement.setIdNavid-+myTextBox.getParent.getElement.getId

然而,我将在这里进行猜测,并假设您希望将自己的自定义ID分配给此小部件的原因是,您可以从GWT代码之外,例如从Javascript,从JQuery,对其进行寻址。在这种情况下,我建议您为小部件的元素指定一个html类名,而不是为它指定一个ID(必须是唯一的才能有用)。然后,您将针对OrderItem的id或类的id或类来寻址小部件的元素。可以向元素添加html类名,如示例myTextBox.getElement.addStyleNamenavid中所示


因此,假设您将orderItemWidget的html类分配给orderItemWidget的根html元素,将navid的html类分配给TextBox,您可以使用选择器.orderItemWidget.navid从JQuery中引用TextBox,这就是为什么GWT使在小部件上设置ID变得不那么容易的原因。对于样式,使用CSS类名更容易。实际上,一开始使用ID的理由很少,对于动态生成的小部件,几乎没有理由

现在,为了回答您的问题,浏览器允许多个元素共享同一ID,并且getElementById按文档顺序返回这些元素中的第一个