O primeiro passo é implementar a classe de conversor. Segue abaixo a classe:
public class MoedaConverter implements Converter {
@Override
public Object getAsObject(FacesContext facesContext,
UIComponent uiComponent, String value) {
FacesContext fc = FacesContext.getCurrentInstance();
Locale l = fc.getViewRoot().getLocale();
if (value != null) {
value = value.trim();
if (value.length() > 0) {
try {
return new BigDecimal(NumberFormat.
getNumberInstance(l).parse(
value).doubleValue());
} catch (ParseException e) {
e.printStackTrace();
}
}
}
return null;
}
@Override
public String getAsString(FacesContext facesContext,
UIComponent uiComponent, Object value) {
if (value == null) {
return "";
}
if (value instanceof String) {
return (String) value;
}
try {
FacesContext fc = FacesContext.getCurrentInstance();
Locale l = fc.getViewRoot().getLocale();
NumberFormat formatador = NumberFormat.getNumberInstance(l);
formatador.setGroupingUsed(true);
return formatador.format(value);
} catch (Exception e) {
throw new ConverterException("Formato não é número.");
}
}
}
Depois deve-se adicionar o seguinte trecho no arquivo faces-config.xml:
<converter>
<converter-id>MoedaConverter</converter-id>
<converter-class>
com.converter.DoubleConverter
</converter-class>
</converter>
Para utilizá-lo agora basta utilizar da seguinte maneira:
<h:inputText id="moeda"Não se esqueça que este conversor não é também máscara de javascript. Então é importante criar a máscara e adicionar no componente para facilitar a vida do usuário.
label="#{msgs.campo_geral_volume_compra}"
value="#{enderecoBean.valor}">
<f:converter converterId="MoedaConverter" />
</h:inputText>
É isto aí pessoal. Qualquer problema avisem.
[]s,