deise.vicky:
Galera, estou com problemas na hora de usar o componente convertNumber.
Preciso validar um determinado campo sendo que este deve conter apenas números, nunca caracteres especiais.
Tenho o seguinte:
<h:inputText id="txCodigo" value="#{myMBean.pojo.codigo}" label="#{mes.codigo}" required="true" maxlength="20" style="width:200px;">
<f:convertNumber integerOnly="true" />
</h:inputText>
O problema é o seguinte:
Se eu digitar ****, exibe a mensagem "Valor **** não é um número"
mas se eu digitar 555***555, o conversor converte o valor para 555 e armazena na base de dados sem gerar nenhuma exceção.
Resumindo, ele sempre pega os números digitados à esquerda ignorando o restante do valor digitado.
Já tentei alterar a propriedade "pattern" para 9999, mas aí eu tenho que digitar 4 digítos para dar certo, porém, o usuário pode querer digitar apenas 1...
Alguém já teve esse tipo de problema? Sabe porque isso acontece? Seria um bug do componente?
Bem, não consegui até agora consertar isso, porém, consegui fazer de uma outra forma: criar uma classe que faz a conversão do valor para Integer. Segue o código:
...
@FacesConverter(value = "integerConverter")
public class IntegerConverter implements Converter {
@Override
public Object getAsObject(FacesContext facesContext,
UIComponent uiComponent, String value) {
Integer result = null;
try{
result = new Integer(Integer.parseInt(value));
}catch (Exception e) {
throw new ConverterException(value + " não é um número.");
}
return result;
}
@Override
public String getAsString(FacesContext facesContext,
UIComponent uiComponent, Object value) {
String result = "";
if (value != null) {
result = value.toString();
}
return result;
}
}
O único problema disso é na mensagem de validação exibida para o usuário, não consigo configurá-la.
Tenho um arquivo .properties onde tenho todas as mensagens de validação, está mais ou menos assim:
javax.faces.component.UIInput.CONVERSION={0}\: Ocorreu um erro de convers\u00E3o.
javax.faces.converter.NumberConverter.NUMBER={2}\: ''{0}'' não é um número.
...
E assim por diante.
Só que usando o converter com a classe de conversão que eu criei, a mensagem que aparece é a primeira do meu arquivo .properties, só que da seguinte forma:
{0}: Ocorreu um erro de conversão.
Sendo que no meu componente seto o 'label' para uma mensagem pré-definida que está em outro arquivo de configuração.
A mensagem deveria aparecer assim:
Código: '***' não é um número.
O valor do 'label' do é "Código", mas parece que depois da conversão esse valor não está sendo reconhecido.
Queria que após ocorrer um erro de validação aparecesse a segunda mensagem do meu arquivo.
Alguém sabe como configurar a mensagem do converter que eu criei? Poderia me dar uma dica?