如何检查jsf组件在xhtml中是否有效



我使用bootstrap css来制作一个简单的表单,这是一个忘记密码提醒。如果密码没有验证,它将显示错误并相应地突出显示输入。问题是,当我第一次加载页面,它说用户名已经无效。我该如何解决这个问题?

<h:form id="forgotPassword" styleClass="mar-top30 mar-bot30">
                    <div class="row">
                        <div class="col-md-4 col-md-offset-4">
                            <h3>Password reminder</h3>
                            <div class="input-group input-group-lg #{!username.valid ? 'has-error' : 'none'}  mar-top15 mar-bot15">
                                <span class="input-group-addon">
                                    <i class="fa fa-user"></i>
                                </span>
                                <h:inputText id="username" value="#{viewAccount.username}" styleClass="form-control input-lg" required="true" requiredMessage="Please enter your username" p:placeholder="Username">
                                    <f:validateLength maximum="20" minimum="3" />
                                    <f:validator validatorId="forgotPasswordValidator"/>
                                </h:inputText>
                            </div>
                            <h:panelGroup layout="block" rendered="#{username.valid}" styleClass="alert alert-danger alert-dismissable">
                                <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
                                <h:message for="username"/>
                            </h:panelGroup>
                            <h:commandButton type="submit" value="Send Reset Link" action="#{viewAccount.forgotPassword()}" styleClass="btn btn-lg btn-default btn-block" />
                            <h:link outcome="login" styleClass="btn btn-lg btn-warning btn-block mar-top15"><i class="fa fa-reply"></i> Return to login</h:link>
                        </div>
                    </div>
                </h:form> 

您需要为username添加绑定,并使用它来检查组件是否有效,或者

为应用程序bean添加一个方法并在UI

中使用它
public static boolean isValid(String clientId) {
        UIComponent comp = FacesContext.getCurrentInstance().
                    getViewRoot().findComponent(clientId);
        if(comp instanceof UIInput) {
            return ((UIInput)comp).isValid();
        }
        throw new IllegalAccessError();
    }

在UI

<h:panelGroup layout="block"
          rendered="#{facesUtil.isValid('forgotPassword:username')}" 
          styleClass="alert alert-danger alert-dismissable">
  <button type="button" class="close" 
            data-dismiss="alert" aria-hidden="true">&times;</button>
 <h:message for="username"/>
 </h:panelGroup>