gpt4 book ai didi

gwt - 使用 ui :field declaration 将 id 添加到字段

转载 作者:行者123 更新时间:2023-12-04 00:52:50 25 4
gpt4 key购买 nike

我试图在我的 UiBinder XML 中声明这些元素:

<label for="lastName">Last Name:</label>
<input type="text" id="lastName" ui:field="lastNameField" maxlength="150" />

简单地说,与文本输入相关联的标签。

但是,当我尝试编译时,出现此错误:

[ERROR] Cannot declare id="lastName" and ui:field="lastNameField" on the same element Element (:23)



这似乎是一个愚蠢的限制,尤其是因为 ui:field不生成 ID。到目前为止,我发现的唯一解决方案是在 Java 代码本身中分配 ID,如下所示:
@UiElement InputElement lastNameField;
...
lastNameField.setId("lastName");

这给我的 Java 添加了不必要的困惑。它还增加了一个复杂性,如果此 ID 在某处更新, <label> XML 中的声明也需要更新(并且标签没有 @UiElement,因此从 Java 端几乎完全不可见。)

有没有办法从 UiBinder XML 本身中将 ID 添加到具有 ui:field 声明的元素?

最佳答案

UiBinder 使用 ID 实现其ui:field魔术,所以不,你不能从 XML 设置它。

这样做的方法是使用带有 ID 的 Java 常量并从双方使用它:

@UiField(provided = true)
final String lastNameId = Document.get().createUniqueId();

@UiField InputElement lastNameField;



lastNameField.setId(LAST_NAME_ID);

在 XML 中:
<ui:with field="lastNameId" type="java.lang.String"/>



<label for="{lastNameId}">Last Name:</label>
<input ui:field="lastNameField" maxlength="150"/>

请注意,我没有使用 type="java.lang.String" 测试上述代码。 , 我一直用
一个包含各种标识符的类(或者更确切地说,一个带有生成器的接口(interface))

替代方案是:
  • 如果可以,请使用 <label> 的替代语法:
    <label>Last Name: <input ui:field="lastNameField" maxlength="150"/></label>
  • 阅读 for=""来自 Java 的值以在 setId() 中使用它,这样至少你删除了重复,但你仍然会遇到你的 ID 可能不是唯一的问题(只要你多次使用你的 UiBinder-widget)
    <label ui:field="lastNameLabel" for="lastName">Last Name:</label>
    <input ui:field="lastNameField" maxlength="150" />

    @UiField LabelElement lastNameLabel;
    @UiField InputElement lastNameField;



    lastNameField.setIf(lastNameLabel.getHtmlFor());
  • 关于gwt - 使用 ui :field declaration 将 id 添加到字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16070979/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com