[quote=smnj]Digao, não sou experiente em jsf, o que de fato faz um converter?
e como implementar, nesse caso?[/quote]
Bom, um converter é o que vai converter (obviamente) um objeto do seu modelo, para uma String que você queira apresentar na sua View. Ficou confuso?
Usando o próprio exemplo do PrimeFaces [code]public class PlayerConverter implements Converter {
public static List<Player> playerDB;
static {
playerDB = new ArrayList<Player>();
playerDB.add(new Player("Messi", 10));
playerDB.add(new Player("Bojan", 9));
playerDB.add(new Player("Henry", 14));
playerDB.add(new Player("Iniesta", 8));
playerDB.add(new Player("Villa", 7));
playerDB.add(new Player("Xavi", 6));
playerDB.add(new Player("Puyol", 5));
playerDB.add(new Player("Afellay", 20));
playerDB.add(new Player("Abidal", 22));
playerDB.add(new Player("Alves", 2));
playerDB.add(new Player("Pique", 3));
playerDB.add(new Player("Keita", 15));
playerDB.add(new Player("Busquets", 16));
playerDB.add(new Player("Adriano", 21));
playerDB.add(new Player("Valdes", 1));
playerDB.add(new Player("Thiago", 30));
}
public Object getAsObject(FacesContext facesContext, UIComponent component, String submittedValue) {
if (submittedValue.trim().equals("")) {
return null;
} else {
try {
int number = Integer.parseInt(submittedValue);
for (Player p : playerDB) {
if (p.getNumber() == number) {
return p;
}
}
} catch(NumberFormatException exception) {
throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Conversion Error", "Not a valid player"));
}
}
return null;
}
public String getAsString(FacesContext facesContext, UIComponent component, Object value) {
if (value == null || value.equals("")) {
return "";
} else {
return String.valueOf(((Player) value).getNumber());
}
}
}[/code]
No método getAsString, você recebe o objeto em si, no seu caso a Empresa, e retorna dela, uma representação textual (String) que a identifique da maneira que você quer, no caso, seria o nome.
No método getAsObject, você recebe a representação textual gerada anteriormente, e precisa a partir dela, obter o objeto para atualizar o seu modelo (ManagedBean), que no caso, ele itera a lista procurando pelo nome, quando encontra o objeto correto o retorna.
Deu pra entender?