2017-05-26 3 views
0

ich versuche, eine @SessionScoped-Komponente nach dem Ändern einer Eigenschaft zu beobachten. HttpSessionAttributeListener löst keine Änderungen in cdi-verwalteten Komponenten aus.cdi beobachten Sitzungsbereichs-Bean geändert

@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; 
} 

} 

Ein Beispiel Servlets:

@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); 
} 

}

Ist das eine Art und Weise, wenn die Komponente Änderung jedes Attribut zu hören? Hat irgendjemand einen Ansatz dafür?

Wichtig: Ich habe keinen Zugriff auf Code oder TestSession Java-Klasse oder Servlet neu schreiben oder hinzufügen.

+0

Ihre Klassen sind im selben Krieg wie TestSession und Servlet? – Rouliboy

Antwort

0

Sie können eine interceptor in der setUser() -Methode platzieren, die eine event erstellt dann fangen Sie es.

+0

Ich kann nicht mit dieser Klasse interagieren, ihre dritte Teilklasse – jslsolucoes

+0

CDI, Interceptors und Events sind Teil des JavaEE-Containers. Verwenden Sie einen JavaEE-Container oder verwenden Sie CDI nur als Abhängigkeit? Im zweiten Fall müssen Sie sie in Ihr Projekt aufnehmen. – fortellao

+0

Ich benutze einen Java ee Container. Ich meine, dass ich nicht mit TestSession Klasse interagieren kann (neu schreiben oder Anmerkungen hinzufügen, etc) – jslsolucoes