Important Notice - Forums is archived
To simplify things and help our users to be more productive, we have archived the current forum and focus our efforts on helping developers on Stack Overflow. You can post new questions on Stack Overflow or join our Discord channel.

Vaadin lets you build secure, UX-first PWAs entirely in Java.
Free ebook & tutorial.
update a property when any event occurs
Hi everyone,
in Vaadin, is it possibile to update a specific property every time any event (fired by any object) occurs (a button click, a label click, a drag & drop, etc.) and before running the event listener method?
Which is the proper place to "intercept" an event, both session-wide and application-wide?
Thanks for your kind answer,
Marco
Hi,
Interesting question. As far as I know, there isn't a way to intercept all events globally, but it depends a bit on at what level you want to catch the events.
You can catch server requests in a HttpServletRequestListener, and do some things there, but you can't in any way know what events will be fired during the handling of the request.
Notice that events can also be fired from user code. For example, if you call setValue() for a field component in your code, it will fire a ValueChangeEvent. Events are usually handled at the level of AbstractComponent, which delegates their handling to an internal EventRouter. However, all that is done locally inside the object handling the events and there isn't any global extension point (such as an EventRouter factory) that would allow making custom event routers. The only possibility would be to extend every component to intercept the events. In Vaadin 7 it might be possible without extending, by using a decorator.
Events caused by user interaction are usually fired in the changeVariables() method for each component type. For example, ClickEvents are fired in the changeVariables() of the Button component. While the changeVariables() is called by the terminal adapter, the adapter doesn't know anything about the semantics of the variables, so it doesn't know what message fires an event and what doesn't.
Marko Grönroos:
Interesting question. As far as I know, there isn't a way to intercept all events globally, but it depends a bit on at what level you want to catch the events.You can catch server requests in a HttpServletRequestListener, and do some things there, but you can't in any way know what events will be fired during the handling of the request.
Hi Marko, thanks for answering,
I think the quoted one is the level I'm generally interested in: for instance, refreshing a local logFilePath property by reading its value in a .properties file might actually be done by using a HttpServletRequestListener.
Thanks again,
Marco