Factory and Observer problem
bashan Oct 10, 2008 3:07 AMHi,
I am trying to delete object from a list. After deleting it, I am activating observer event to reload the data. The data is deleted, the event is activated and the data is reloaded. I can see that the data from the new query is the updated one, but I still see the data on the screen. It is updated only when I leave the view and come back to it again.
These are the 2 classes used for deleting and getting the data:
The function deleteVideo
responsible for the action
@Name("userHomeAction") @Scope(ScopeType.CONVERSATION) public class UserHomeAction { @In private FacesMessages facesMessages; @In MediaDAO mediaDAO; @In Session nikoniansDatabase; @In UserDAO userDAO; @Logger private Log log; @In (required = false) User user; @In (required = true, create = true) UserService userService; public void deleteVideo() { Integer mediaId = FacesUtil.getRequestParameterAsInteger("mediaId"); Media media = mediaDAO.getMedia(mediaId); media.setStatus(MediaStatus.DELETED); nikoniansDatabase.persist(media); if (media instanceof Video) { Events.instance().raiseEvent("user.video.changed"); } else if (media instanceof ForumEntry) { Events.instance().raiseEvent("user.picture.changed"); } else if (media instanceof Article) { Events.instance().raiseEvent("user.article.changed"); } facesMessages.add(FacesMessage.SEVERITY_INFO, "Media was deleted", media.getMediaId()); } }
he function getUserVideos
is responsible for getting the data shown on the view:
@Name("userService") @Scope(ScopeType.CONVERSATION) public class UserService { @In UserDAO userDAO; @In User user; @Out (required = true) User serviceUser; @RequestParameter Integer userId; @Create @Begin public void init() { if (userId != null) { serviceUser = userDAO.getUser(userId); } else { serviceUser = user; } } @Factory(value="userVideos") @Observer("user.video.changed") public List<Media> getUserVideos() { return userDAO.getMedias(Video.class, serviceUser); } @Factory(value="userPicturePosts") @Observer("user.picture.changed") public List<Media> getUserPicturePosts() { return userDAO.getMedias(ForumEntry.class, serviceUser); } @Factory(value="userArticles") @Observer("user.article.changed") public List<Media> getUserArticles() { return userDAO.getMedias(Article.class, serviceUser); } }
Am I missing something?