> @Persist(PersistenceConstants.FLASH) makes nullifies Person in Persons
page (listing page), thereby breaking it...

This sounds like bad design if your ListPersons page is referencing an
object persisted by your EditPerson page. It sounds like the flash
persistance should instead be on your ListPersons page and that your
EditPerson page should initialize and return an instance of ListPersons
(instead of returning ListPersons.class). Something like this:

public class ListPersons {
   @Property
   @Persist(PersistenceConstants.FLASH)
   private Person lastEditedPerson;

   @Property
   private List<Person> persons;

   public void init(Person lastEditedPerson) {
      this.lastEditedPerson = lastEditedPerson;
   }
   ...
}


public class EditPerson {
   @Property
   private Person person;

   @InjectPage
   private ListPersons listPersons;

   private Long personId;

   @Inject
   private Session session;

   public void onActivate(EventContext context) {
      if (context.getCount() > 0) {
         personId = context.get(Long.class, 0);
      }
   }

   void setupRender() throws Exception {
      if (personId != null) {
         person = session.get(Person.class, personId);
      } else {
         person = new Person();
      }
   }

   @CommitAfter
   Object onSuccess() {
      session.saveOrUpdate(person);
      listPersons.init(person);
      return listPersons;
   }

   public void onPassivate() {
      if (person.getId() != null) {
         return person.getId();
      }
   }
}

Reply via email to