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?
 
     
     
    