浏览器自动填充Wicket formpanel中的错误字段

时间:2014-03-07 09:09:29

标签: java wicket autofill

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

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 个答案:

答案 0 :(得分: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"); 和用户名输入字段对象相同。