CDI 观察会话范围的 Bean 已更改



>我试图在更改任何属性后观察@SessionScoped组件。HttpSessionAttributeListener 不会触发 cdi 托管组件中的更改。

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

一个示例 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);
}

}

当组件更改任何属性时,这是一种侦听的方法吗?任何人都有办法做到这一点吗?

重要提示:我无权在 TestSession java 类或 servlet 上重写或添加代码。

您可以在 setUser(( 方法中放置一个拦截器,该方法创建一个事件然后捕获它。

最新更新