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?