Olá a todos,
estou com uma dúvida que já se arrasta por alguns dias e o cenário é o seguinte:
tenho um formulário a ser preenchido e nele eu uso uma tag <p:selectOneMenu> onde
é populada com valores vindos do banco de dados, ok. O lance é quando
vou enviar o formulario para o servidor, nao estou conseguindo converter a string para o Objeto correspondente
na minha aplicação. Abaixo está parte do código do meu formulario no xhtml:
<h:outputLabel value="Empresa:" for="empresa"></h:outputLabel>
<p:selectOneMenu id="empresa" value="#{empresaBean.empresa}" >
<f:selectItems id="itensEmpresa" value="#{empresaBean.empresasSelect}" var="empre" itemLabel="#{empre.empresa}" itemValue="#{empre.idEmpr}"></f:selectItems>
</p:selectOneMenu>
Aqui está o codigo do metodo que é chamado no atributo value da tag <f:selectItems> acima:
public List<SelectItem> getEmpresasSelect() throws SQLException {
if(empresaSelect == null) {
empresaSelect = new ArrayList<SelectItem>();
EmpresaRN empresaRN = new EmpresaRN(); List<Empresa> empresas = empresaRN.listar();
for(Empresa a : empresas) { empresaSelect.add(new
SelectItem(a.getIdEmpr(), a.getEmpresa()));
}//fim do for
}//fim do if
return empresaSelect;
}//fim do metodo getEmpresaSelect
Com essa implementação o navegador retorna um erro tipo: "Conversion Error setting value ‘41’ for ‘null Converter’. ", beleza, então é necessário implementar um conversor para que a operação transforme um objeto em texto e um texto em objeto.
Implementei vários exemplos que achei na internet, todos dando um erro na hora de fazer cast no atributo Integer na minha classe Empresa(mais especificamente na linha 31 abaixo). Segue o código da classe Converter:
@FacesConverter(forClass = Empresa.class)
public class EmpresaConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component,
String value) {
if (value != null && value.trim().length() > 0) {
int codigo = Integer.valueOf(value);
try {
EmpresaRN empresaRN = new EmpresaRN();
return empresaRN.carregar(codigo);
} catch (Exception e) {
throw new ConverterException(
"Nao foi possivel converter o codigo da empresa"
+ value + "." + e.getMessage());
}// fim do bloco try/catch
}// fim do if
return null;
}// fim do metodo getAsObject
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value != null) {
Empresa empresa = (Empresa) value;
return empresa.getIdEmpr().toString();
}
return "";
}
}// fim da classe EmpresaConverter
Quando implemento a classe acima o formulário nem chega a ser exibido já da o erro 500 direto.
Estou usando:
[list]JSF2.0 [/list]
[list]primefaces3.2[/list]
[list]tomcat7[/list]
Já pesquisei em vários sites e também aqui no forum do GUJ, se alguém puder ajudar agradeço desde já.
Em anexo vai duas imagens do navegador quando os erros são retornados.
Obrigado a todos pela atenção.