To be a bit more concrete: the AdminEventsBean allows to create new data and push it to the database (using hibernate); to avoid going to the DB to query the data, since it's rather static, it also calls a reload function on the GlobalData bean, that reloads the data from the db; then, the RegistrationBean calls the getEventItems, which is defined as:

private List<SelectItem> eventItems = new ArrayList<SelectItem>();

and accessible through getter only.

I tried adding more printouts, and I get surprising results. In the ApplicationScoped bean (GlobalData), in the getter for the inconsistent field, I've added a print of the content of the list:

All lists are the same, except the 3d one, which is the one obtained after calling the reload function on globalData from one of the ViewScoped beans. So it shows that after the call to reload, the list is properly updated (it contains the additional element), but as soon as I move to another page which calls the getEventItems (through the JSF lifecycle), it returns to the old version.

Unfortunately, yes, all beans have public setters and getters for the @ManagedProperty.

I did another test, and found something else which is very strange: in the addAction action which is used from the AdminEventsBean (viewscoped) to store new items in the DB and then invoke the reload function on globalData, I added the following printouts:

Looking at the trace, I can see that the two globalData are not the same; the first one (GlobalData@38493622) is incorrect, and it's the one that will be used to reload, hence my problem. The same applies to the other viewscoped bean