GWT uibinder自动更正关闭

时间:2013-04-15 15:16:40

标签: html gwt uibinder gwt2

即时通讯使用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'> 

我可以做任何其他方式吗???

由于

2 个答案:

答案 0 :(得分:3)

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

  1. 添加新包(例如com.app.shared.customcontrol
  2. 添加新的CustomTextBox:

    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绑定器声明新命名空间并使用您的组件:

    <!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>
    
  4. 如果您想在系统范围内应用这些设置,可以通过构造函数来执行此操作:

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

答案 1 :(得分:1)

由于GWT不会将UiBinder属性直接转换为HTML元素属性,因此您尝试过的内容将无效。相反,当您的错误消息提示时,它会查找格式set[UiBinder_attribute]的窗口小部件设置器方法。由于the TextBox class中既没有setAutocorrect也没有setAutocapitalize方法,因此您可能会遇到错误。

你可以做的是放到元素级别并写下这样的东西,例如:在你的小部件的构造函数中:

   public MyWidget() {
      initWidget(uiBinder.createAndBindUi(this));
      searchS.getElement().setProperty("autocapitalize", "off");
      searchS.getElement().setProperty("autocorrect", "off");
   }