Validação de Devedor com JSF: Bean, Facelets e Mensagens
Questão 1 - Facelet e Managed Bean
Dado o facelet abaixo com os campos cpf e saldo e a classe Devedor, indique o resultado do método ver() com a condição de falha ou sucesso.
Resposta:
@ManagedBean(name="dev")
public class Devedor {
private int c;
private double s;
public int getC() {
return c;
}
public void setC(int c) {
this.c = c;
}
public double getS() {
return s;
}
public void setS(double s) {
this.s = s;
}
public String ver() {
if (s > 0.0) {
return "sucesso";
} else {
return "falha";
}
}
}Questão 2 - Navegação com faces-config
Baseado na Questão 1 e sabendo que a página de cadastro é cadastro.xhtml, configure o faces-config.xml:
<managed-bean>
<managed-bean-name>dev</managed-bean-name>
<managed-bean-class>pacote.Devedor</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>/cadastro.xhtml</from-view-id>
<navigation-case>
<from-outcome>sucesso</from-outcome>
<to-view-id>/resposta.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>falha</from-outcome>
<to-view-id>/msg.xhtml</to-view-id>
</navigation-case>
</navigation-rule>Questão 3 - Facelet com campos obrigatórios
Reescreva o código XHTML da Questão 1, tornando obrigatórios o CPF e o saldo, com valor mínimo de -20.000.
<h:form>
<h:outputLabel for="c" value="CPF:"/>
<h:inputText id="c" value="#{dev.c}" required="true"
requiredMessage="Este campo deve ser preenchido"/>
<h:outputLabel for="s" value="Saldo:"/>
<h:inputText id="s" value="#{dev.s}" required="true"
requiredMessage="Este campo deve ser preenchido"
converterMessage="Este valor deve ser um número real"
validatorMessage="Este valor deve ser maior que -20.000">
<f:validateDoubleRange minimum="-20000"/>
</h:inputText>
<h:commandButton value="Enviar" action="#{dev.ver}"/>
</h:form>Questão 4 - Validação customizada de CPF
Implemente um método de validação customizada utilizando CPF.ehValido(n).
public void validaCPF(FacesContext context, UIComponent comp, Object n) throws ValidatorException {
boolean b = CPF.ehValido((String) n);
if (!b) {
FacesMessage mensagem = new FacesMessage("CPF inválido");
throw new ValidatorException(mensagem);
}
}Associação no cadastro.xhtml:
<h:inputText id="cpf" value="#{dev.c}" validator="#{dev.validaCPF}"/>Questão 5 - Mensagens centralizadas em arquivo .properties
Centralize as mensagens utilizadas em um arquivo .properties:
c=CPF{0}
s=Saldo{1}
msgRequerimento=Por favor preencha os campos {0} e {1}
msgResp1=O {0} número
msgResp2=Está com saldo R$
msgSucesso=Em dia!
msgFalha=Devedor!Configuração no faces-config.xml:
<application>
<resource-bundle>
<base-name>mensagens</base-name>
<var>msg1</var>
</resource-bundle>
</application>Uso em resposta.xhtml e msg.xhtml:
#{msg1.msgResp1} #{dev.c}
#{msg1.msgResp2} #{dev.s}
#{msg1.msgSucesso}
#{msg1.msgFalha}Complemento - MIDlet (Java ME)
Uma classe MIDlet deve estender javax.microedition.midlet.MIDlet e sobrescrever os métodos abstratos startApp(), pauseApp() e destroyApp(boolean unconditional).