Отключить автозаполнение (autocomplete="off") с помощью STRUTS

Я попытался отключить автозаполнение (autocomplete="off") в Struts Framework, процесс, которому я следовал: 1) В файле Strut-html.tld у меня было несколько атрибутов TextTag, поэтому я добавил атрибут autocomplete

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

2) я написал класс для customtag, расширив org.apache.struts.taglib.html.TextTag

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 ответа

Вам не нужно переписывать Struts 1.x, чтобы добавить эту функциональность. Все, что вам нужно, это добавить следующие строки:

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

Есть быстрый и грязный взлом, документированный здесь http://www.coderanch.com/t/54020/Struts/form-input-tags-turning-autocomplete который встраивает опцию autocomplete в другой элемент формы.

Например

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

Struts отображает как

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

Это не красиво, но это избавляет от необходимости переопределять теги Struts.

Я перепробовал много решений 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-компонента.

ты можешь использовать

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

Это работало для меня на стойках 1, J7 Eclipse keplar, сервер wildfly.

Другие вопросы по тегам