Boa tarde pessoal tudo bem?
Estou com meu primeiro projeto utilizando JSF, Spring e estou me deparando com um problema no uso dos Converter, dentro de um Converter estou utilizando o getHibernateTemplate.find(“from Funcionario where codigo=?”, codigoFuncionario) mas me parece que o Spring não está conseguindo realizar seu papel neste caso o que devo fazer ? Acredito que não estou recebendo um Session do Spring…
obs. Como estou aprendendo essa nova arquitetura JPA, Spring… Posso ter falado alguma besteira me corrijam…
Obrigado.
Qual é o erro que está acontecendo?
Eu tenho um código muito parecido com isso que funciona normalmente.
Olá Mauricio o meu converter está desta maneira:
package br.com.fato.juridico.converter;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import br.com.fato.juridico.bean.Estado;
public class EstadoConverter extends HibernateDaoSupport implements Converter {
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) throws ConverterException {
Estado estado = null;
try {
//estado = (Estado) getHibernateTemplate().get(Estado.class, arg2);
estado = (Estado) getHibernateTemplate().find("from Estado where codigoEstado=?", arg2);
System.out.println(estado.getNomeEstado());
} catch (Exception e) {
System.out.print(e.getMessage());
}
return estado;
}
public String getAsString(FacesContext arg0, UIComponent arg1, Object object) throws ConverterException {
if (object == null) {
return String.valueOf("");
}
return object.toString();
}
}
No meu Bean Estado sobrescrevi o toString para exibir o atributo codigoEstado e reparei q no momento da execucaco do converter no console é exibido um: nullHibernate
O seu Converter não deveria herdar de HibernateDaoSuport, ele deveria ter acesso a um objeto que herde de HibernateDaoSuport e que esteja no contexto do Spring.
Ola Mauricio e pessoal, olha coloquei no meu EstadoServiceImpl o metodo:
public Object carregar(String codigo) {
Estado estado = (Estado) getHibernateTemplate().get(Estado.class, codigo);
if (estado == null) {
throw new ObjectRetrievalFailureException(Cliente.class, codigo);
}
return estado;
}
Essa minha classe está informada no applicationContext.xml mas pelo q eu estou vendo nao está nem sendo chamado pelo converter.
<bean id="estadoService" parent="txProxyTemplate">
<property name="target">
<bean class="br.com.faro.juridico.service.EstadoServiceImpl">
<property name="estadoDAO">
<ref bean="estadoDao"/>
</property>
</bean>
</property>
</bean>
alguém possui uma sugestão
Estive verificando e pelo que entendi o Spring está injetando o session após a minha tentativa de recuperar o objeto Estado, existe alguma maneira de consertar isso ?
Meu Bean está definido assim:
<bean id="estadoService" parent="txProxyTemplate">
<property name="target">
<bean class="br.com.faro.juridico.service.EstadoServiceImpl">
<property name="estadoDAO">
<ref bean="estadoDao"/>
</property>
</bean>
</property>
</bean>
Na minha classe utilitaria o metodo setEstadoService está sendo executado após o getEstado que precisa da session pra fazer a busca.
public class EstadoWeb {
private EstadoService mgr = null;
public void setEstadoService(EstadoService estadoService) {
this.mgr = estadoService;
}
public TreeMap getListaEstados() {
return mgr.listaEstados();
}
public Estado getEstado(String codigo){
return mgr.getEstado(codigo);
}
}
Bom consegui resolver em termos o problema, peguei atravez do facesContext a minha classe que estava com a sessão injetada dessa maneira consegui fazer ele pesquisar o objeto com sucesso, mas ainda continua dando o problema de Not Valid
alguém tem idéia do q está ocorrendo?
Que problema de not valid é esse?
Mauricio como vc havia me recomendado em um post anterior, criei um metodo dentro de uma classe que recebia a session do spring para recuperar a classe e persistir.
Então fiz isso da seguinte maneira no meu Converter:
public Object getAsObject(FacesContext facesContext, UIComponent arg1,
String arg2) throws ConverterException {
Long codigo = new Long(arg2);
SegmentoWeb segmentoWeb = (SegmentoWeb) facesContext.getApplication().getVariableResolver().resolveVariable(facesContext, "Segmento");
Segmento segmento = (Segmento) segmentoWeb.carregaSegmento(codigo);
return segmento;
}
Mas quando realizo um Submit na pagina, o Converter consegue recuperar as informações do BD, mas exibe na pagina o erro: Validation Error: Value is not valid
Rapaz, nunca vi isso, mas se ele está dando erro de validação, será que não é outra validação que você configurou não?