Problema ao implementar PhaseListener

2 respostas
E

Pessoal qual o efeito colateral quando implemento a interface PhaseListener e sobrescrevo o site método desta forma:

@Override
   public PhaseId getPhaseId() {
      return PhaseId.RESTORE_VIEW;
   }

O que aconteceu comigo foi que parou de funcionar:

<f:ajax render="instrutor" event="change" listener="#{turmaBean.alterarComboBoxEstado}"/>

Quando adicionei o atributo immediate=true consegui desparar o evento porém, ele não submete o valor correto da combo.

Segue abaixo a minha implementação que encontrei num blog:

package sigpr.web.view.filter;

import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.servlet.ServletContext;
import org.hibernate.FlushMode;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.dao.DataAccessResourceFailureException;
import org.springframework.orm.hibernate3.SessionFactoryUtils;
import org.springframework.orm.hibernate3.SessionHolder;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

public class HibernateRestoreViewPhaseListener implements PhaseListener {

   private static final long serialVersionUID = 1L;

   protected Session getSession(SessionFactory sessionFactory) throws DataAccessResourceFailureException {
      Session session = SessionFactoryUtils.getSession(sessionFactory, true);
      session.setFlushMode(FlushMode.MANUAL);
      return session;
   }

   protected SessionFactory lookupSessionFactory() {

      FacesContext context = FacesContext.getCurrentInstance();
      ServletContext servletContext = (ServletContext) context.getExternalContext().getContext();
      WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(servletContext);
      return (SessionFactory) wac.getBean("sessionFactory", SessionFactory.class);
   }

   @Override
   public void afterPhase(PhaseEvent event) {
   }

   @Override
   public void beforePhase(PhaseEvent event) {

      SessionFactory sessionFactory = lookupSessionFactory();
      if (!TransactionSynchronizationManager.hasResource(sessionFactory)) {
         Session session = getSession(sessionFactory);
         TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session));
      }
   }

   @Override
   public PhaseId getPhaseId() {
      return PhaseId.RESTORE_VIEW;
   }

}

2 Respostas

E

Pessoal…Alguém pode me ajudar!

E

gente…

Por que depois que implementei phase o ajax parou de funcionar ?

Criado 19 de dezembro de 2011
Ultima resposta 20 de dez. de 2011
Respostas 2
Participantes 1