1 2 Previous Next 19 Replies Latest reply on Apr 20, 2007 7:48 AM by Rafal Balaga

    New Conversation issue

    js8523 Novice

      I 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

        1 2 Previous Next