1 Reply Latest reply on Jun 6, 2007 3:41 AM by Tomas Mika

    pageflow definition and start-state

    Tomas Mika Newbie

      Hi, I have not found anywhere in the documentation, how to handle the start-state correctly in CRUD operations:

      The situation is, that I have non conversational list of items. I select one of the listed items to display the detail of it (car.xhtml). On the detail
      the user can select "Edit", what switches him/her to the carEdit.xhtml page. This works fine with the car to edit. What I need is
      to use the same page for creating the new car instances. I need to hook the same pageflow dirrectly from the carList.xhtml

      I know, that it is possible to have more transitions in the <start-state> element, like I already have, but I don't
      know, how to tell the pageflow to use the name="create" one (suppose, that if not specified otherwise, the one without the name is used)

      So the question is: how to tell the pageflow to use the transition name="create" to="editCar"

      Here is the code, which works fine with the car to edit:

      carList.xhtml - link to display the detail of the car

      <s:button view="/car/car.xhtml" value="Select" id="selectCarButton">
       <f:param name="carId" value="#{car.id}" />
      </s:button>
      


      car/car.page.xml
      the carHome.start actualy starts the new conversation with the pageflow "editcar"

      <page action="#{carHome.start}">
       <param name="carId" value="#{carHome.carId}" />
      </page>
      


      editcar pagefrow .jpdl.xml file
      <pageflow-definition xmlns="http://jboss.com/products/seam/pageflow"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://jboss.com/products/seam/pageflow http://jboss.com/products/seam/pageflow-1.2.xsd"
       name="editcar">
      
       <start-state name="start">
       <transition name="create" to="editCar" />
       <transition to="selectCar" />
       </start-state>
      
       <page name="selectCar" view-id="/car/car.xhtml">
       <transition name="edit" to="editCar" />
       <transition name="done" to="doneCar" />
       </page>
      
       <page name="editCar" view-id="/car/carEdit.xhtml" no-conversation-view-id="/car/carList.xhtml">
       <redirect />
       <transition name="cancel" to="selectCar" />
       <transition name="save" to="saveCar" />
       <transition name="remove" to="doneCar">
       <action expression="#{carHome.remove}" />
       </transition>
       </page>
      
       <decision name="saveCar" expression="#{carHome.managed}">
       <transition name="true" to="selectCar">
       <action expression="#{carHome.update}" />
       </transition>
       <transition name="false" to="selectCar">
       <action expression="#{carHome.persist}" />
       </transition>
       </decision>
      
       <page name="doneCar" view-id="/car/carList.xhtml">
       <redirect />
       <end-conversation />
       </page>
      
      </pageflow-definition>
      


      The component carHome
      package cz.timony.carConsumption.ejb.session.car;
      
      import org.jboss.seam.annotations.Begin;
      import org.jboss.seam.annotations.In;
      import org.jboss.seam.annotations.Name;
      import org.jboss.seam.annotations.RequestParameter;
      import org.jboss.seam.annotations.security.Restrict;
      import org.jboss.seam.framework.EntityHome;
      
      import cz.timony.carConsumption.ejb.model.Car;
      import cz.timony.carConsumption.ejb.model.User;
      
      @Name("carHome")
      @Restrict("#{identity.loggedIn}")
      public class CarHome extends EntityHome<Car> {
      
       @RequestParameter
       Integer carId;
      
       private static final long serialVersionUID = 1712476447498905090L;
      
       @In(value = "currentUser")
       User currentUser;
      
       public Car getInstance() {
       return super.getInstance();
       }
      
       @Begin(join = true, pageflow="editcar")
       public void start() {
       wire();
       }
      
       public void setCarId(Integer id) {
       setId(id);
       }
      
       public Integer getCarId() {
       return (Integer) getId();
       }
      
       @Override
       protected Car createInstance() {
       Car car = new Car();
       return car;
       }
      
       public void wire() {
       if (getInstance().getUser() == null && currentUser != null) {
       getInstance().setUser(currentUser);
       }
       }
      
       public boolean isWired() {
       if (getInstance().getUser() == null)
       return false;
       return true;
       }
      
       public Car getDefinedInstance() {
       return isIdDefined() ? getInstance() : null;
       }
      }