Vaadin 如何设置自动完成=";关「;在瓦丁
是否可以在Vaadin 如何设置自动完成=";关「;在瓦丁,vaadin,Vaadin,是否可以在Vaadin 7中的文本字段上设置HTML5属性autocomplete=“off”? 我已经搜索过了,但没有找到在文本字段上设置属性的方法,也没有找到在vaadin中以其他方式提示浏览器禁用输入字段的本机自动补全功能的方法。我认为使用javascript的唯一方法是: TextField tf = new TextField(); tf.addStyleName("xyz"); JavaScript.getCurrent().execute( "document.getEle
Vaadin 7
中的文本字段上设置HTML5属性autocomplete=“off”
?
我已经搜索过了,但没有找到在文本字段上设置属性的方法,也没有找到在vaadin中以其他方式提示浏览器禁用输入字段的本机自动补全功能的方法。我认为使用javascript的唯一方法是:
TextField tf = new TextField();
tf.addStyleName("xyz");
JavaScript.getCurrent().execute(
"document.getElementsByClassName('xyz')[0].setAttribute('autocomplete', 'off')");
扩展文本字段
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;
}
}
不要忘记重新编译小部件集。如果使用,现在可以使用HtmlementPropertySetter类包装TextField组件,并使用该类将“autocomplete”元素属性设置为“off”。您也可以使用Viritin附带的MTextField组件,只需按如下方式创建它:
MTextField username = new MTextField("Username")
.withAutocompleteOff();
这是@Wojciech Marciniak答案的扩展。他的方法对我来说很有效,但我想指出,为了使其在2017/11/28起生效,我必须做两三次修改 1)
autocomplete=“off”
如今似乎不再有效;至少不是在铬上。相反,您可以使用在Chrome 62.0.3202.94 windows 64位上运行的autocomplete=“new password”
。我还注意到该属性存在一些不一致的行为,因为这些行为并不总是有效的——有时组件上会显示一个包含密码选项的列表(特别是在您刷新几次之后,等等)
2a)您可能不想扩展组件,而是想通过在项目中创建com.vaadin.client.ui.(组件)字段
包来覆盖它,然后将修改后的(组件)FieldConnector.java
文件放入其中(在我的例子中,我正在修改密码字段
)以防您希望此组件的所有实例都不记住密码。最后一个类源应该如下所示:
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;
}
}
这样,您就不需要任何其他类来扩展TextField(或PasswordField)
2b)如果您希望允许某些字段记住密码,而其他字段不记住密码,则可以扩展该组件并相应地使用首选组件。您可以像2a)中那样保留连接器类,但请记住将其命名为类似于
CustomPasswordFieldConnector
,并且它还应该@Connect
与该CustomPasswordField.class连接,将该类放在项目中的任何位置,并记住在连接器中添加适当的import
,以防需要。这个类只是一个虚拟类-如果不需要任何额外的功能,可以将其内容留空(但请记住,它应该扩展适当的(组件)字段
;密码字段
。我不再处理Vaadin项目来确认它是否有效。如果有第三方确认,我会将这个答案设置为可接受的,因为这是我在Java中的首选方式,而不是使用JavaScriptHi Krayo,我刚刚添加了这个,它可以工作,但当我刷新页面时,它会关闭,有什么解决方案吗?