如何在vaadin中设置autocomplete =“off”

时间:2014-11-03 07:44:35

标签: vaadin

是否可以在autocomplete="off"的TextField上设置HTML5属性Vaadin 7? 我搜索过但发现没有办法在文本字段上设置属性,或者只是提示浏览器在vaadin中以其他方式禁用输入字段上的本机自动完成。

4 个答案:

答案 0 :(得分:7)

我认为如果你使用javascript是唯一的方法:

TextField tf = new TextField();
tf.addStyleName("xyz");
JavaScript.getCurrent().execute(
    "document.getElementsByClassName('xyz')[0].setAttribute('autocomplete', 'off')");

答案 1 :(得分:3)

扩展TextField ...

package com.example;
import com.vaadin.ui.TextField;

public class MyTextField extends TextField {
   // do other customization here  as needed
}

...和 ​​- 这里的关键点是什么 - 它的客户端连接器

package com.example.client;

import com.vaadin.client.ui.VTextField;
import com.vaadin.client.ui.textfield.TextFieldConnector;
import com.vaadin.shared.ui.Connect;

@Connect(com.example.MyTextField.class)
public class MyTextFieldConnector extends TextFieldConnector {

   @Override
   public VTextField getWidget() {
      VTextField vTextField = super.getWidget();
      vTextField.getElement().setAttribute("autocomplete","off");
      return vTextField;
   }

}

不要忘记重新编译小部件集。

答案 2 :(得分:3)

如果您使用Viritin add-on,现在可以使用HtmlElementPropertySetter类来包装TextField组件并使用它来设置" autocomplete"元素属性为" off"。您还可以使用Viritin附带的MTextField组件,并按如下方式创建它:

MTextField username = new MTextField("Username")
        .withAutocompleteOff();

答案 3 :(得分:1)

这是@Wojciech Marciniak答案的延伸。他的方法对我很有用,但我想注意一下,为了让它在2017/11/28工作,我必须做几三次修改。

1)autocomplete="off"现在似乎不再起作用了;至少不在Chrome上。相反,您可以使用autocomplete="new-password",它适用于Chrome 62.0.3202.94 Windows 64位。我还注意到这个属性有一些不一致的行为,因为并不总是有效 - 有时一个包含密码选择的列表会显示在组件上(特别是在你刷新几次之后等等)。

2a)您可能希望通过在项目中创建com.vaadin.client.ui.(component)field包来覆盖它,而不是扩展组件,然后将修改后的(component)FieldConnector.java文件放入其中(在我的情况下,我正在修改{ {1}})如果您希望此组件的所有实例都不记得密码。最终的类源应如下所示:

PasswordField

因此,您不需要任何其他类扩展TextField(或PasswordField)。

2b)如果要允许某些字段记住密码而其他字段不记住密码,则可以扩展组件并相应地使用首选组件。你可以保持你的连接器类,如2a),但记住命名为package com.vaadin.client.ui.passwordfield; import com.vaadin.client.ui.VPasswordField; import com.vaadin.client.ui.textfield.TextFieldConnector; import com.vaadin.shared.ui.Connect; import com.vaadin.ui.PasswordField; @Connect(PasswordField.class) public class PasswordFieldConnector extends TextFieldConnector { @Override public VPasswordField getWidget() { VPasswordField vTextField = (VPasswordField) super.getWidget(); vTextField.getElement().setAttribute("autocomplete","new-password"); return vTextField; } } ,它也应该CustomPasswordFieldConnector与CustomPasswordField.class,把它放在你的项目适合的任何地方,并记得在连接器中为它添加适当的@Connect以备不时之需。这个类只是一个虚拟的 - 你可以将它的内容留空,以防你不需要任何额外的功能(但请记住它应该在示例中扩展正确的import; (component)Field