pageflow definition and start-state
timony Jun 5, 2007 3:31 AMHi, 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; } }