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