如何防止不需要的自动填充JSF输入标记

时间:2014-07-03 12:17:22

标签: jsf jsf-2

首先,我开发了一个Web应用程序,并使用 JSF 2.2.6

用户名密码保存时,用户权限在"登录" Chrome或Firefox的页面,其他空 h:inputText h:inputSecret 在"管理员面板"使用这些保存的信息(登录过程中的名称和密码)自动填充页面。

我使用JSF 2.x的模板功能来设计我的页面。我在这个模板中为我的所有页面使用相同的表单(id = mainForm)。但是,登录页面的输入元素的ID与"管理面板"中的输入元素的ID不同。页。

在我找到问题和答案 - Unwanted Autofills后,我开始使用" autocomplete =' off'" 作为&的输入#34;管理员面板"。然而,没有任何改变。

为什么它能正常运作?我该如何处理这个问题。我想在管理面板中显示h:inputText和h:inputSecret标记,但实际上没有初始记录。

所有反馈都赞赏!

登录页面;

   <ui:composition template="...">
        <ui:define name="headContent">
            <h:outputStylesheet library="css" name="loginPage.css" />
        </ui:define>
        <ui:define name="content">
            <div id="loginArea">
                <h:inputText id="nameInput" class="nameInput" value="#{loginFacade.loginName}" />
                <h:inputSecret id="passInput" class="passInput" value="#{loginFacade.loginPass}" />
                <h:commandButton id="..." class="sendInput" image="..." 
                            binding="..." action="..." />
                <h:messages class="errorMessage" layout="table" />
                <p:defaultCommand target="sendInput" />
            </div>
        </ui:define>
    </ui:composition>

管理面板页面;

  ...
        <td>
            <span jsfc="h:outputLabel" value="#{msgs['adminPanel.userName']}"></span>
        </td>
        <td>
            <input jsfc="h:inputText" id="usrDetUsrName" class="usrDetLbl" value="#{adminPanelFacade.tempUsr.USER_NAME}" disabled="#{adminPanelFacade.newRecFlag}" autocomplete="off"/>
        </td>
    </tr>
    <tr class="usrDetTblRow">
        <td>
            <span jsfc="h:outputLabel" value="#{msgs['adminPanel.password']}"></span>
        </td>
         <td>
            <input jsfc="h:inputSecret" id="usrDetPass" class="usrDetLbl" redisplay="true" value="#{adminPanelFacade.tempUsr.PASSWORD}" autocomplete="off"/>
        </td> 
  ...

2 个答案:

答案 0 :(得分:0)

Google Chrome and IE (v11 onwards)不尊重autocomplete=off,而是支持为任何网站保存密码的可用性。

他们将属性autocomplete=off更改为true。 您需要开发一个自定义脚本,将属性更改回“关闭”

您可以使用以下脚本

添加重置功能以在表单中添加autocomplete "off"
function setAutocomplete()
{
if (navigator.userAgent.toLowerCase().indexOf('chrome') >= 0) 
{
setTimeout(function () {
        document.getElementById('myForm').setAttribute('autocomplete', 'off'); 
}, 100);
}
}

答案 1 :(得分:0)

在Fire Fox和chrome浏览器中它对我来说很好用,你可以使用2个空输入标签:

<input name="dummyinput" id="dummyinput" type="text" /> 

<input name="dummypassword" type="password" id="dummypassword" />
输入你的名字之前

(h:inputText),然后添加另一个空的输入密码字段说
密码字段(h:inputSecret)之后的<input id=dummypassword2" name=dummypassword2" type="password" />,将不会存储登录凭据。