2017-05-26 1 views
0

J'essaie d'observer un composant @SessionScoped après avoir changé n'importe quelle propriété. HttpSessionAttributeListener ne déclenche pas de modifications dans les composants gérés cdi.cdi observer la session scoped bean

@SuppressWarnings("serial") 
@SessionScoped 
public class TestSession implements Serializable { 


private User user; 

public TestSession() { 

} 

public User getUser() { 
    return user; 
} 

public void setUser(User user) { 
    this.user = user; 
} 

} 

Un exemple Servlet:

@SuppressWarnings("serial") 
@WebServlet(name = "demo", urlPatterns = "/demo") 
public class DemoServlet extends HttpServlet { 

private static final Logger logger = LoggerFactory.getLogger(DemoServlet.class); 

@Inject 
private TestSession testSession; 

@Override 
protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) 
     throws ServletException, IOException { 

    User user = new User(1L,new Role(1L)); 
    user.setId(RandomUtils.nextLong()); 
    testSession.setUser(user); //listen that component change something 


    RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/jsp/demo.jsp"); 
    dispatcher.forward(httpServletRequest, httpServletResponse); 
} 

}

La façon d'écouter quand changement de composant tout attribut? Quelqu'un a une approche pour le faire?

Important: Je n'ai pas accès à la réécriture ou à l'ajout de code sur la classe Java ou la servlet TestSession.

+0

Vos classes sont dans la même guerre que TestSession et Servlet? – Rouliboy

Répondre

0

Vous pouvez placer un interceptor dans la méthode setUser() qui crée un event puis l'attraper.

+0

Je ne peux pas interagir avec cette classe, sa troisième classe de partie – jslsolucoes

+0

CDI, Interceptors et les événements sont la partie du conteneur JavaEE. Utilisez-vous un conteneur JavaEE ou utilisez-vous simplement CDI comme dépendance? Dans le second cas, vous devrez les inclure dans votre projet. – fortellao

+0

J'utilise java ee container. Je veux dire que je ne peux pas interagir avec la classe TestSession (réécrire ou ajouter des annotations, etc) – jslsolucoes