使用STRUTS禁用自动完成(自动完成="关闭")

时间:2014-06-11 06:45:02

标签: javascript jsp jstl struts-1 custom-tags

我试图在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为/ tag写了一个类

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");
}

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

例如

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

Struts渲染为

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

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

答案 2 :(得分:0)

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

&#13;
&#13;
var selectedIndex = Int ()

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
{
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell

    cell.backgroundColor = selectedIndex == indexPath.row ? UIColor.green : UIColor.red

    return cell
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
{
    selectedIndex = indexPath.row

    self.yourCollctionView.reloadData()
}
&#13;
&#13;
&#13;

和其他几个人,他们似乎都没有工作.. 我认为唯一的解决方案是: 将您的标记更改为html标记,然后在表单的提交函数中将该值分配给您所需的bean属性。

你可以使用

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

这对struts 1,J7 Eclipse keplar,wildfly服务器有用。