Os componentes de JSF, necessitam em muitos casos conversões de tipos de dados. Ex: converter="javax.faces.Long", javax.faces.Boolean ... Porém, quando isso foge do padrão e um tipo de informação única é esperada, você precisa especificar o tipo de dado que seu componente ira receber, vou passar os passos simples para a criação de seu próprio converter JSF:
1) Desenvolva a classe:
package com.meupacote.conversores;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
public class MeuConverter implements Converter {
public Object getAsObject(FacesContext context, UIComponent cp, String v) throws ConverterException {
try {
// Faz os procedimentos necessários para a conversão
// no exemplo eu substituo, "oi", por "tchau", você
// pode precisar fazer algo mais importante
return v.replaceAll("oi","tchau");
} catch(NullPointerException e) {
return null;
}
}
public String getAsString(FacesContext context, UIComponent component, Object value) throws ConverterException {
if(value == null) {
return null;
}
// Coloque o procedimento que suprime sua necessidade
return value.toString().replaceAll("cachorro","dog").trim();
}
}
2) Adicione as linhas no seu faces-config.xml
<faces-config>
<!-- etc etc etc -->
<converter>
<description>Conversor para tirar o oi e botar o tchau</description>
<converter-id>meuConverter</converter-id>
<converter-class>com.meupacote.conversores.MeuConverter</converter-class>
</converter>
</faces-config>
3) Use-o como precisar:
<h:selectOneMenu id="meusValores" converter="meuConverter" value="#{meuBean.meuValorEspecial}">
<f:selectItems value="#{meuBean.meusValores}" />
</h:selectOneMenu>
Nenhum comentário:
Postar um comentário