Validar valores num formulário JSF + Primefaces

I ae galera…

fiz esse formulário para cadastrar nova consulta:

<h:form id="cadastroDeConsulta">
            
            <p:panel header="Nova Consulta">
                <h:panelGrid columns="2">
                    
                    <h:outputLabel value="Paciente:* " for="paciente"/>
                    <p:selectOneMenu value="#{beanConsulta.idPaciente}" style="width: 300px" required="true" requiredMessage="Preencha o campo Paciente!">
                        <f:selectItem itemLabel="Selecione " itemValue=""/>
                        <f:selectItems value="#{beanPaciente.pacientes}" var="p" itemValue="#{p.id}" itemLabel="#{p.nome}"/>
                    </p:selectOneMenu>
                    
                    <h:outputLabel value="Dia da Consulta:* " for="diaConsulta"/>
                    <p:calendar navigator="true" id="datanasc" value="#{beanConsulta.consulta.dia}"
                                locale="br" effect="explode"  pattern="dd/MM/yyyy"
                                 required="true" requiredMessage="Preencha o campo Dia da Consulta!"/>
                    
                    <h:outputLabel value="Hora Inicial:* " for="horaInicial"/>
                    <p:calendar timeOnly="true" locale="br" pattern="HH:mm" minHour="8" maxHour="18" value="#{beanConsulta.consulta.horaInicial}"
                                required="true" requiredMessage="Preencha o campo Hora Inicial!"/>
                    
                    <h:outputLabel value="Hora Final:* " for="horaFinal"/>
                    <p:calendar timeOnly="true" locale="br" pattern="HH:mm" minHour="8" maxHour="18" value="#{beanConsulta.consulta.horaFinal}"
                                required="true" requiredMessage="Preencha o campo Hora Final!"/>
                    
                    <h:outputLabel value="Box:* " for="box"/>
                    <p:inputText id="box" value="#{beanConsulta.consulta.box}"
                                 required="true" requiredMessage="Preencha o campo Box!"/>
                    
                    <h:outputLabel value="Observações: " for="obs"/>
                    <p:inputTextarea id="obs" value="#{beanConsulta.consulta.obs}"/>
                    
                </h:panelGrid>
                
                
                <p:commandButton value="Salvar" update="cadastroDeConsulta" action="#{beanConsulta.gravar()}">
                </p:commandButton>
                obs.: Os campos marcados com * são obrigatórios
                <p:ajaxStatus >  
                    <f:facet name="start">  
                        <h:graphicImage library="imagens" name="vazio.gif" id="ok" />
                    </f:facet>  
                </p:ajaxStatus>
                
                
            </p:panel>
        </h:form>

O que eu gostaria é de fazer com que o formulário só cadastrasse a consulta se o valor de horaFinal ser maior que horaInicial e também gostaria de verificar se já tem consultas no mesmo box e no mesmo horário…

Alguém pode me ajudar???

Se você quiser validar no browser do cliente, você terá que utilizar javascript.

Se quiser validar com código java você pode criar um validator ou então no método que salva você verifica os valores.

Para validas os horários basta testar as datas por exemplo:

 if (horaInicial().after(horaFinal())) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "", "Hora de início precisa ser menor que hora final."));