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