Conversations, Wizards, and Home objects
gzoller.greg.zoller.aviall.com Jul 11, 2008 7:14 PMHello,
I'm trying to do something pretty straightforward. I want a 2 or 3 screen wizard that will populate and entity object that gets persisted at the end of the wizard. Sounds like a job for a conversation.
I start my conversation in a page.xml file:
<begin-conversation join="true"/>
I've taken my default seam-gen'ed Home object and added annotations to make it conversation-scoped:
@Scope(ScopeType.CONVERSATION) @Name("custorderHome") public class CustorderHome extends EntityHome<Custorder> { @In(create = true) AddressHome addressHome; @In(create = true) UserHome userHome; ...
Ok, so now the UI. I have a page like below; the first screen of my wizard:
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.com/products/seam/taglib" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.org/rich" template="layout/template.xhtml"> <ui:define name="body"> <h:messages globalOnly="true" styleClass="message" id="globalMessages"/> <h:form id="wiz1" styleClass="edit"> <rich:panel> <f:facet name="header">New Order Wizard (1 of 3)</f:facet> <s:decorate id="active" template="layout/display.xhtml"> <ui:define name="label">Order for User</ui:define> <h:selectOneMenu id="selectUser" value="#{custorderHome.instance.user}"> <s:selectItems value="#{userList.resultList}" var="user" label="#{user.name}" noSelectionLabel="Select User" hideNoSelectionLabel="1" /> <s:convertEntity/> </h:selectOneMenu> </s:decorate> <p/> </rich:panel> <div class="actionButtons"> <s:button view="/Wizard_2.xhtml" id="next" value="Next"/> <s:button view="/home.xhtml" id="cancel" value="Cancel"/> </div> </h:form> </ui:define> </ui:composition>
So far, so good. When run I do get a nice pull-down populated with users as I expect, but... when I hit Next to go to wizard page 2 something doesn't carry over--my User assignment from page 1 isn't visible. In page 1 the pull down is supposed to select and populate a User from the list but on page 2 if I have code like the following I see displayed true, false, (nothing), and (nothing) respectively:
Managed: #{custorderHome.managed} Wired: #{custorderHome.wired} Id: #{custorderHome.instance.idcustOrder} User: #{custorderHome.instance.user.name}
What am I not doing right? I go to the debug.seam screen and can validate that a conversation has been created, a custorderHome object exists in that conversation, but the instance is empty (non-null, but not populated) there too.
Thanks for any help,
Greg