2014-03-07 43 views
1

我正在使用Wicket窗体来允许webapp的管理员编辑用户帐户数据。有一个密码字段,管理员可以为用户和其他帐户数据字段设置新密码。当我打开窗体时,浏览器使用我保存在浏览器中的密码自动填充密码字段。默认情况下,此字段应保留为空白。此外,浏览器在手机号码的字段中插入我的用户名(“admin”)!浏览器在Wicket窗体中自动填充错误的字段

The formpanel

有没有一种方法,以避免改变formfield的代码这种行为?例如禁止自动填充或类似的东西? 下面是相关的代码部分:

 mobile = new TextField<String>("mobile"); 
    mobile.add(PhonenumberValidator.getInstance()); 
    mobile.setOutputMarkupId(true); 
    addToForm(new FencedFeedbackPanel("mobileCfp", mobile)); 
    addToForm(mobile); 
    generatedPassword = new GeneratedPasswordLabelPanel("generatedPassword"); 
    generatedPassword.setOutputMarkupId(true); 
    generatePassword = new IndicatingAjaxLink<Void>("generatePassword"){ 
     private static final long serialVersionUID = 6759645521399346111L; 

     @Override 
     public void onClick(AjaxRequestTarget target) { 
      generatedPasswordString = PasswordGenerator.generatePassword(8); 
      generatedPassword.setPasswordString(generatedPasswordString); 
      target.add(generatedPassword); 
     } 
    }; 
    newPassword = new PasswordTextField("newPassword"); 
    newPassword.add(PasswordValidator.getInstance()); 
    newPassword.setOutputMarkupId(true); 
    newPassword.setModel(new Model<String>()); 
    newPassword.setRequired(false); 
    newPassword.setResetPassword(true); 
    newPassword.add(new RequiredLabelBehavior()); 
    confirmPassword = new PasswordTextField("confirmPassword"); 
    confirmPassword.setOutputMarkupId(true); 
    confirmPassword.setModel(new Model<String>()); 
    confirmPassword.setRequired(false); 
    confirmPassword.setResetPassword(true); 
    confirmPassword.add(new RequiredLabelBehavior()); 
    pwContainer = new WebMarkupContainer("pwContainer"); 
    pwContainer.add(confirmPassword); 
    pwContainer.add(newPassword); 
    pwContainer.add(generatePassword); 
    pwContainer.add(generatedPassword); 
    pwContainer.add(new FencedFeedbackPanel("newPasswordCfp", newPassword)); 
    pwContainer.add(new FencedFeedbackPanel("confirmPasswordCfp", confirmPassword)); 
    pwContainer.setVisible(ajax); 
    addToForm(pwContainer); 

这是Wicket的HTML代码:

<?xml version="1.0" encoding="UTF-8"?> 

 <div wicket:id="emailCfp" /> 
     <input wicket:id="email" type="text" /> 
     <div class="brclear"></div> 

     <select wicket:id="account.salutation" /> 
     <div class="brclear"></div> 

     <input wicket:id="title" type="text" style="width:100px" /> 
     <div class="brclear" /> 

     <div wicket:id="firstnameCfp" /> 
     <input wicket:id="firstname" type="text" /> 
     <div class="brclear"></div> 

     <div wicket:id="lastnameCfp" /> 
     <input wicket:id="lastname" type="text" /> 
     <div class="brclear"></div> 

     <div wicket:id="phoneCfp" /> 
     <label><wicket:message key="phone" /></label><input wicket:id="phone" type="text" /> 
     <div class="brclear"></div> 

     <div wicket:id="birthday" /> 
     <div class="brclear" /> 

     <div wicket:id="mobileCfp" /> 
     <label><wicket:message key="mobile" /></label><input wicket:id="mobile" type="text" /> 
     <div class="brclear"></div> 
    </fieldset> 

    <fieldset wicket:id="imageContainer"> 
     <legend><wicket:message key="legend.picture" /></legend> 
     <div> 
      <img style="float: left; margin: 0px 5px 5px 0px;" wicket:id="userImage" /> 
      <br /> 
      <span wicket:id="blob"></span> 
     </div> 
    </fieldset> 

    <fieldset wicket:id="pwContainer"> 
     <legend><wicket:message key="legend.pw" /></legend> 
     <input type="button" wicket:id="generatePassword" wicket:message="value:generatePassword" /> 
     <div style="float:left;"> 
      <div wicket:id="generatedPassword" /> 
     </div> 
     <div class="brclear"></div> 

     <div wicket:id="newPasswordCfp" /> 
     <input wicket:id="newPassword" type="password" /> 
     <div class="brclear"></div> 

     <div wicket:id="confirmPasswordCfp" /> 
     <input wicket:id="confirmPassword" type="password" /> 
     <div class="brclear"></div> 
    </fieldset> 

    <wicket:child /> 

</wicket:extend> 

谢谢!

+1

在这种情况下,HTML代码可能更有帮助,因为浏览器将无法访问您的Java代码。 我认为,自动填充的textfields将具有名称=“密码”或“用户名”,因此会自动填充。 – Seega

+0

请接受答案或写评论。 – Seega

回答

2

以下代码将告诉您如何停用HTML表单的自动填充。我认为那是你需要的。但我不知道如何在Java中设置这个值。 autocomplete="off"是神奇的参数。

<form action="demo_form.asp" method="get" autocomplete="off"> 
    First name:<input type="text" name="fname"><br> 
    E-mail: <input type="email" name="email"><br> 
    <input type="submit"> 
</form> 

编辑:我发现了一些在https://issues.apache.org/jira/browse/WICKET-1504,但我不知道它是否工作。 newPassword.put("autocomplete", "off"); 与用户名输入字段对象相同。

+0

要实现这一点,您需要使用'newPassword.add(AttributeModifier.replace(“autocomplete”,“off”))'(Wicket 6,Wicket 1.5有点不同) – bernie