2

我使用 GWT uibinder 方法,我的 html 包含一个文本框

<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
     xmlns:g="urn:import:com.google.gwt.user.client.ui"
     xmlns:idmw="urn:import:com.testing.wid.impl">
    <g:HTMLPanel>
    <table align="center" valign="center" height="25%">
        <tr><td><g:TextBox ui:field='searchS' /></td></tr>

    </table>
    </g:HTMLPanel>

我如何关闭此文本框的自动更正和自动大写?我试过了

  <g:TextBox ui:field='searchS' autocapitalize="off" autocorrect="off"/>

但我明白了

[ERROR] Class TextBox has no appropriate setAutocorrect()
method Element <g:TextBox autocapitalize='off' autocorrect='off' ui:field='searchS'> 

我还有其他方法可以做到吗???

谢谢

4

2 回答 2

3

正如@Boris Brudnoy 已经指出的那样,TextBox 没有内置的方法。Takin 进一步提出他的建议,将其提取到新的自定义组件中会很好(以简化重用和支持):

  1. 添加新包(例如com.app.shared.customcontrol
  2. 添加新的自定义文本框:

    public class CustomTextBox extends TextBox {
    
        public void setAutocomplete(String value){
            this.getElement().setAttribute("autocomplete", value);
        }
    
        public void setAutocapitalize(String value){
            this.getElement().setAttribute("autocapitalize", value);
        }
    }
    
  3. 使用 UI binder 声明新的命名空间并使用您的组件:

    <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
    <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
        xmlns:g="urn:import:com.google.gwt.user.client.ui"
        xmlns:c="urn:import:com.app.shared.customcontrol">
    
        <g:HTMLPanel ...>
            <c:CustomTextBox ui:field="..." autocomplete="off" autocapitalize="off"  />
        </g:HTMLPanel>
    </ui:UiBinder>
    

作为替代方法,如果您想在系统范围内应用这些设置,您可以通过构造函数来实现:

public class CustomTextBox extends TextBox {

    public CustomTextBox() {
        this.getElement().setAttribute("autocomplete", "off");
        this.getElement().setAttribute("autocapitalize", "off");
    }

    ....
}
于 2013-04-15T16:15:31.380 回答
1

由于 GWT 不会将 UiBinder 属性直接转换为 HTML 元素属性,因此您尝试过的方法将不起作用。相反,正如您的错误消息提示的那样,它会查找表单的小部件设置器方法set[UiBinder_attribute]。由于TextBox 类setAutocorrect中既没有也没有setAutocapitalize方法,因此您得到的错误是预期的。

您可以做的是下降到元素级别并编写类似这样的内容,例如在您的小部件的构造函数中:

   public MyWidget() {
      initWidget(uiBinder.createAndBindUi(this));
      searchS.getElement().setProperty("autocapitalize", "off");
      searchS.getElement().setProperty("autocorrect", "off");
   }
于 2013-04-15T15:40:32.797 回答