如何在 primefaces 中强制使用强密码 p:password

How to force strong password in primefaces p:password

我正在创建注册表单。我想强制 p:password 是强大的。有什么方法可以验证 p:password 是强的吗?我想被视为 'strong' 与 p:password 的反馈相同的指标。

好像有no build-in solution for your requirement. Only I can see it in primefaces showcase密码反馈

 <p:password id="pwd" value="#{passwordView.password3}" feedback="true"
      weakLabel="Weak" goodLabel="Good" strongLabel="Strong"/>

或者您可以使用验证器

   <p:password id="pwd" value="#{passwordView.password3}" feedback="true"
      weakLabel="Weak" goodLabel="Good" strongLabel="Strong">
      <f:validateLength minimum="4" maximum="101"/> // or
      <f:validator  validatorId="passwordValidator" />
   </p:password>

验证class

  @ManagedBean
  @RequestScoped
  @FacesValidator(value = "passwordValidator")
  public class PasswordValidator implements Validator, Serializable {

  @Override
 public void validate(FacesContext fc, UIComponent uic, Object propertyValue) throws ValidatorException {
    // your validation here 
 }

我的解决方案:

<h:form id="form" >
    <p:password  value="#{regitroCtrl.usuario.contrasenia}"
                 id="contrasena"
                 feedback="true"   
                 required="true"   
                 onblur="validarPassword()"/>
    <p:message for="contrasena" id="contrasenaMsg" />

    <p:commandButton value="Registrarse"
                     action="#{regitroCtrl.registrarse()}"
                     update="form"
                     onclick="return validarPassword()"/>
</h:form>

validarPassword 函数:

function validarPassword(){
    var strength = PrimeFaces.widget.Password.prototype.testStrength($("#form\:contrasena").val());
    if(strength <= 30){
        $("#form\:contrasenaMsg").html('<span class="ui-message-error-icon"></span><span class="ui-message-error-detail">Por favor, ingresa una contraseña más fuerte</span>');
        $("#form\:contrasena").addClass("ui-state-error");
        return false;
    }
    else {
        $("#form\:contrasenaMsg").html('');
        $("#form\:contrasena").removeClass("ui-state-error");
        return true;
    }

}