使用 STRUTS 禁用自动完成(autocomplete="off")

Posted

技术标签:

【中文标题】使用 STRUTS 禁用自动完成(autocomplete="off")【英文标题】:Disable Auto-complete(autocomplete="off") using STRUTS 【发布时间】:2014-08-01 02:50:10 【问题描述】:

我试图在 struts 框架中禁用自动完成(autocomplete="off"),我遵循的过程是 1)在 Strut-html.tld 文件中,我几乎没有 TextTag 的属性,因此添加了自动完成属性

<tagclass>org.apache.struts.taglib.html.TextTag</tagclass>
<attribute>
<name>autocomplete</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>   
</attribute>

2)我通过扩展 org.apache.struts.taglib.html.TextTag 为 customtag 编写了一个类

import org.apache.struts.taglib.html.TextTag.*;

public class TextTag extends org.apache.struts.taglib.html.TextTag  


private static final long serialVersionUID = 1L;
private String autocomplete = null;

public String getAutocomplete()
 return autocomplete; 

public void setAutoComplete(String autocomplete)

this.autocomplete = autocomplete; 

 

protected void prepareOtherAttributes(StringBuffer sb)  


if (autocomplete != null)  

sb.append(" autocomplete=\""+autocomplete+"\""); 



3) 在 jsp 页面中我添加了 autocomplete="off" 属性

所以当我运行我的应用程序时出现以下错误

/index.jsp(1): Error in using tag library uri='/tags/struts-html' prefix='html':
The Tagclass'org.apache.struts.taglib.html.FormTag' has no setter method corresponding  
to TLD declared attribute 'name', (JSP 1.1 spec, 5.4.1)  probably occurred due to an 
error in /index.jsp line 1:  
<%@ taglib uri="/tags/struts-html" prefix="html" %>

请有人帮我解决这个错误,我也尝试使用 javascript,但它不起作用。

function DisableAutocomplete()

var AC_Disable_login=document.forms[0].elements['loginID'];
AC_Disable_login.setAttribute ("autocomplete", "off");

【问题讨论】:

正确格式化代码。 嗨,Braj,我认为代码现在格式正确。 仍有一些对齐问题,但没有问题,它看起来比以前更好。 它可能会帮助你。阅读form/input tags and turning off autocomplete 感谢您的链接,即使我以相同的方式尝试过,但它显示相同的错误。 【参考方案1】:

您无需重写 Struts 1.x 即可添加此功能。您只需添加以下几行:

<script src="//code.jquery.com/jquery-1.11.1.min.js"></script>
<script>
    $(function()
        $(":text").attr("autocomplete", "off");
    );
</script>

【讨论】:

嗨,保罗,感谢您的回答,我应该添加(链接)上面提到的代码部分吗? 你可以在&lt;head&gt;部分或者最后的&lt;body&gt;中添加,你想要的地方。 嗨,保罗,感谢您的帮助,正如我上面提到的,我在 struts 应用程序中的属性是文本,所以我可以将您的代码 sn-p 应用于文本属性而不是输入属性...比如 $(" :text").attr("自动完成", "关闭"); 嗨,保罗我用过 以便自动完成此文本框,我可以使用 $(":text").attr("autocomplete", "off") 吗? 是的!这是最好的方法。我更新了我的答案以包含此内容。【参考方案2】:

http://www.coderanch.com/t/54020/Struts/form-input-tags-turning-autocomplete 此处记录了一个快速而肮脏的 hack,它将自动完成选项嵌入到另一个表单元素中。

例如

<html:form method="post\" autocomplete=\"off" action="verify_login.do" >

Struts 呈现为

<form name="LoginForm" method="post" autocomplete="off" action="verify_login.do">

它并不漂亮,但它省去了重新定义 Struts 标记库的需要。

【讨论】:

【参考方案3】:

我尝试了很多解决方案 1.包括上面给出的肮脏的黑客, 2. 通过在页面加载时调用脚本来设置表单的自动完成功能:

    <body class="article-page auxillary-page" onload="autocompletion()">
 function autocompletion()
 
         for (i=0; i<document.forms.length; i++) 
         document.forms[i].setAttribute("AutoComplete","off");
        
 

还有一些其他的,它们似乎都不起作用.. 我认为唯一的解决方案是: 将您的标签更改为 html 标签,然后在表单的提交函数中将该值分配给您所需的 bean 属性。

你可以使用

&lt;input type="password" name="password1" maxlength="4" size="25" readonly onfocus="this.removeAttribute('readonly');" autocomplete="off" /&gt;

这在 struts 1、J7 Eclipse keplar、wildfly 服务器上对我有用。

【讨论】:

以上是关于使用 STRUTS 禁用自动完成(autocomplete="off")的主要内容,如果未能解决你的问题,请参考以下文章

使用 sql 数据填充自动完成 jquery vars

Materialisecss自动完成中的两个onChange事件

在 django 中使用 JQuery 自动完成小部件

使用角形和镀铬禁用自动填充/自动完成

通过 CSS 禁用自动完成

如何禁用 chrome / jquery 的自动完成和自动填充