New Conversation issue
js8523 Jan 5, 2006 12:10 PMI have a stateful session bean called SiteEditor (Conversation scoped) with a create method. I wish to from a page backed by this bean, to open up another page with a SiteEditor bean as its backing bean (new data).
When trying to do this I can open the first siteEditor page, but when I use the link to open up the new siteEditor page (it refreshes but shows the old data).
The two relevant functions in the siteEditor bean are :
@Create
@Begin(join=true)
 public void createSiteEditor(){
 log.info("Creating");
 if (utilityID.getId() == 0){
 site = new Site();
 isNew = true;
 } else {
 site = (Site) em.find(Site.class, utilityID.getId());
 if (site==null){
 // TODO throw error, no site found for the id.
 } else {
 siteChildren = site.getChildren();
 isNew = false;
 }
 }
 }
and
@End
 public String editContract(){
 if (utilityID==null) utilityID = new UtilityId();
 utilityID.setId(selectedChild.getId());
 if (selectedChild instanceof Site)
 return "showsite";
 else if (selectedChild instanceof Plot)
 return "editplot";
 else if (selectedChild instanceof Region)
 return "editregion";
 else if (selectedChild instanceof Block)
 return "editblock";
 else if (selectedChild instanceof Phase)
 return "editphase";
 else
 return "error";
 }
I also put a log messge in the @Destroyed method and I see this occur in the expected pattern.
The one issue that causes my problem is that when I press on the button the first time the create function is not called, its as if the page is reusing the siteEditor left over from the previous conversation (even though I called the @End method).
One extra piece of information is that if I then repress on the same commandButton a second time a new siteEditor is created.
The xhtml code is as follows:
<ui:define name="body">
 <h1>Site Editor</h1>
 <h:form>
 <table>
 <tr>
 <td><h:outputText value="Name" /></td>
 <td><h:inputText value="#{siteEditor.site.name}" /></td>
 <td></td>
 <td rowspan="8" vAlign="top">
 <c:if test="#{siteEditor.new}" >
 <table>
 <tr><td>
 <h:commandButton action="#{siteEditor.create}" value="Create" rendered="#{siteEditor.new}"
 class="formButton" style="width: 166px;"/>
 </td></tr>
 <tr><td>
 <h:commandButton action="#{siteEditor.done}" value="Cancel"
 class="formButton" style="width: 166px;" immediate="true"/>
 </td></tr>
 </table>
 </c:if>
 <c:if test="#{!siteEditor.new}">
 <table>
 <tr><td>
 <h:commandButton action="#{siteEditor.update}" value="Update"
 class="formButton" style="width: 166px;"/>
 </td></tr>
 <tr><td>
 <h:commandButton action="#{siteEditor.delete}" value="Delete"
 class="formButton" style="width: 166px;" immediate="true"/>
 </td></tr>
 <tr><td>
 <h:commandButton action="#{siteEditor.done}" value="Finish"
 class="formButton" style="width: 166px;" immediate="true"/>
 </td></tr>
 </table>
 </c:if>
 </td>
 </tr>
 <tr>
 <td><h:outputText value="Parent" /></td>
 <td>
 <h:selectOneMenu value="#{siteEditor.site.parent}" converter="ContractConverter" >
 <f:selectItems value="#{selectItems.contractList}" />
 </h:selectOneMenu>
 </td>
 </tr>
 <tr>
 <td><h:outputText value="ID" /></td>
 <td><h:inputText value="#{siteEditor.site.accountsID}" /></td>
 </tr>
 <tr>
 <td><h:outputText value="Area" /></td>
 <td><h:inputText value="#{siteEditor.site.area}" /></td>
 </tr>
 <tr>
 <td><h:outputText value="Address" /></td>
 <td><h:inputText value="#{siteEditor.site.address.housename}" /></td>
 </tr>
 <tr>
 <td></td>
 <td><h:inputText value="#{siteEditor.site.address.streetname}" /></td>
 </tr>
 <tr>
 <td></td>
 <td><h:inputText value="#{siteEditor.site.address.town}" /></td>
 </tr>
 <tr>
 <td></td>
 <td><h:inputText value="#{siteEditor.site.address.city}" /></td>
 </tr>
 <tr>
 <td></td>
 <td><h:inputText value="#{siteEditor.site.address.county}" /></td>
 </tr>
 <tr>
 <td></td>
 <td><h:inputText value="#{siteEditor.site.address.postcode}" /></td>
 </tr>
 <tr>
 <td><h:outputText value="Price" /></td>
 <td><h:inputText value="#{siteEditor.site.price}" /></td>
 </tr>
 <tr>
 <td><h:outputText value="Sub Contracts" /></td>
 <td></td>
 </tr>
 <tr>
 <td colspan="2">
 <h:dataTable value="#{siteChildren}" var="c" rendered="#{siteChildren.rowCount>0}">
 <h:column>
 <f:facet name="header">ID</f:facet>
 <h:outputText value="#{c.accountsID}" />
 </h:column>
 <h:column>
 <f:facet name="header">Name</f:facet>
 <h:outputText value="#{c.name}" />
 </h:column>
 <h:column>
 <f:facet name="header">Action</f:facet>
 <h:commandButton action="#{siteEditor.editContract}" value="View" />
 </h:column>
 </h:dataTable>
 </td>
 </tr>
 </table>
 <h:messages showDetail="true" />
 </h:form>
 </ui:define>
If anybody has any ideas I would be very greatful.
Many thanks,
James
 
     
     
     
    