8 Replies Latest reply on Oct 31, 2007 2:16 PM by jbeaken

    Pageflow problems with back button

    jbeaken

      Hi, I hope someone may be able to help with a stateful model pageflow issue I am currently having.

      I have a pageflow defined, a little bit of which is here:

      <?xml version="1.0"?>
      <pageflow-definition name="requestTrackQuote" conversation-required="true">

      <start-page view-id="/quote/searchTracks.xhtml" name="start">

      </start-page>

      <page name="searchTracks"
      view-id="/quote/searchResults.xhtml"
      no-conversation-view-id="/quote/searchTracks.xhtml">






      I start a convesation using an s:link

      <s:link action="start" propagation="begin" pageflow="requestTrackQuote" value="Search for tracks"/>

      The conversation proceeds fine unless I click on the back button. When I do, I am returned to the previous page but upon clicking any of the action links, nothing happens.

      On reading the docs I came across this :

      Seam transparently detects the use of the back button, and blocks any attempt to perform an action from a previous, "stale" page, and simply redirects the user to the "current" page (and displays a faces message).

      This is simply not happening for me, there is no redirect to the 'current page', I'm just left stranded on the previous page

      Anybody got any ideas??

      thanks

        • 1. Re: Pageflow problems with back button
          jbeaken

          By the way, I'm using seam 1.2.1GA with jboss 4.2.1

          • 2. Re: Pageflow problems with back button

            If I'm reading you right, the previous page was not in the conversation. If you hit the back button OUT of a conversation and into another one, that is perfectly fine - as long as that conversation is still active.

            • 3. Re: Pageflow problems with back button
              jbeaken

              Hi,

              thanks for looking at my problem
              but no, the previous page was in the conversation, I see your point regarding differing conversations but that's not the case here. Please see the full pageflow definition below:

              So say I've started the flow and navigated to /quote/selectProductionFolder.xhtml, clicking back button takes me back to /quote/searchResults.xhtml, but here clicking any action (eg. 'quote') just refreshes the current page /quote/searchResults.xhtml

              
              <?xml version="1.0"?>
               <pageflow-definition name="requestTrackQuote" conversation-required="true">
               <!-- ****************** -->
               <!-- START YOUR ENGINES -->
               <!-- ****************** -->
               <start-page view-id="/quote/searchTracks.xhtml" name="start">
               <transition name="start" to="searchTracks"/>
               </start-page>
              
               <page name="searchTracks"
               view-id="/quote/searchResults.xhtml"
               no-conversation-view-id="/quote/searchTracks.xhtml"
               back="enabled">
               <redirect />
               <transition name="quote" to="selectProductionFolder">
               <action expression="#{createLicenseRequestService.addTrack}"/>
               </transition>
               </page>
              
               <!-- ****************** -->
               <!-- PRODUCTION FOLDERS -->
               <!-- ****************** -->
              
               <page name="selectProductionFolder"
               view-id="/quote/selectProductionFolder.xhtml"
               no-conversation-view-id="/quote/searchTracks.xhtml">
               <redirect />
               <transition name="addNewFolder" to="addNewFolder" />
               <transition name="selectExistingFolder" to="selectProductionUsage">
               <action expression="#{createLicenseRequestService.addFolder}"/>
               </transition>
               </page>
              
               <page name="addNewFolder"
               view-id="/folder/addFolder.xhtml"
               no-conversation-view-id="/quote/searchTracks.xhtml">
               <redirect />
               <transition name="addFolder" to="selectProductionUsage">
               <action expression="#{addFolderService.add}"></action>
               </transition>
               </page>
              
               <!-- ****************** -->
               <!-- PRODUCTION USAGE -->
               <!-- ****************** -->
              
               <page name="selectProductionUsage"
               view-id="/quote/selectProductionUsage.xhtml"
               no-conversation-view-id="/quote/searchTracks.xhtml">
               <redirect />
               <transition name="addNewProductionUsage" to="checkUsage" />
               <transition name="prev" to="selectProductionFolder" />
               <transition name="selectExistingProductionUsage" to="selectTrackUsage">
               <action expression="#{createLicenseRequestService.addProductionUsage}"></action>
               </transition>
               </page>
              
               <decision name="checkUsage" expression="#{usageType}">
               <transition name="1" to="addAdvertisementProductionUsage">
               <action expression="#{createLicenseRequestService.initAdvertisementProductionUsage}"></action>
               </transition>
               </decision>
              
               <page name="addAdvertisementProductionUsage" view-id="/quote/addAdvertisementProductionUsage.xhtml"
               no-conversation-view-id="/quote/searchTracks.xhtml">
               <redirect/>
               <transition name="prev" to="selectProductionUsage" />
               <transition name="addedAdvertisementProductionUsage" to="selectTrackUsage"/>
               </page>
              
               <!-- ****************** -->
               <!-- TRACK USAGE -->
               <!-- ****************** -->
              
               <page name="selectTrackUsage" view-id="/quote/selectTrackUsage.xhtml"
               no-conversation-view-id="/quote/searchTracks.xhtml">
               <redirect />
               <transition name="addNewTrackUsage" to="addNewTrackUsage" />
               <transition name="selectExistingTrackUsage" to="confirm">
               </transition>
               </page>
              
               <page name="addNewTrackUsage"
               view-id="/quote/addTrackUsage.xhtml"
               no-conversation-view-id="/quote/searchTracks.xhtml">
               <redirect />
               <transition name="prev" to="selectTrackUsage"/>
               <transition name="addTrackUsage" to="confirm">
               <action expression="#{addTrackUsageService.add}" />
               </transition>
               </page>
              
               <!-- ****************** -->
               <!-- CONFIRM -->
               <!-- ****************** -->
              
               <page name="confirm" view-id="/quote/confirmLicenseRequest.xhtml"
               no-conversation-view-id="/quote/searchTracks.xhtml">
               <redirect />
               <transition name="prev" to="selectTrackUsage" />
               <transition name="submit" to="viewSummary">
               <action expression="#{createLicenseRequestService.addLicenceRequest}" />
               </transition>
               <transition name="cancel" to="cancel"/>
               </page>
              
               <!-- ****************** -->
               <!-- SUMMARY -->
               <!-- ****************** -->
              
               <page name="viewSummary" view-id="/quote/viewSummary.xhtml"
               no-conversation-view-id="/quote/searchTracks.xhtml">
               <redirect />
               <end-conversation />
               </page>
              
               </pageflow-definition>
              


              • 4. Re: Pageflow problems with back button

                Did you ever figure out what the resolution for this was? We're having similar issues - someone submits a page which (in our case) creates a new object and adds it to a collection. They then press back, which since it was the same HTML page should show the same page but about the new (current) object. It doesn't - the current object is still in scope but the data for the previous object is shown. If they then resubmit, it overwrites the new object with the data from the previous object! If they hit Refresh, the page is correctly shown with the data from the new object.

                A convoluted way to say, "Me too," I know. Any solution?

                • 5. Re: Pageflow problems with back button
                  zerg-spirit

                  Well, same here.
                  I think I read in the Seam documentation that in a stateful context, back button is 'disabled' by Seam, but it seems not to be the case.
                  I have exactly the same problem as stated above.

                  • 6. Re: Pageflow problems with back button
                    jbeaken

                    I am now using stateless jsf navigation rather than jpdl because of this problem, is there no solution? it seams a pretty major problem if not

                    • 7. Re: Pageflow problems with back button
                      jbeaken

                      Trying to use a ui:include but I need to generate dynamic s:links, not even sure it's possible, something like this:
                      Page that has the ui:include

                      <ui:include src="/include/pagination.xhtml">
                       <ui:param name="next" value="#{listCompaniesService.next}"/>
                      <ui:param name="itemCount" value="#{listCompaniesService.itemCount}"/>
                       <ui:param name="batchSize" value="#{listCompaniesService.batchSize}"/> <ui:param name="firstItem" value="#{listCompaniesService.firstItem}"/> </ui:include>
                      


                      with include :
                      <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">
                       <!-- FIRST -->
                       <s:div id="tabcontainer" rendered="#{firstItem < batchSize}">
                       <s:div styleClass="pageresults" rendered="#{itemCount > 0}">
                       <div class="middle_highlight">
                       <h:outputText value="#{firstItem + 1} ... #{itemCount < firstItem + batchSize ? itemCount : firstItem + batchSize}"/>
                       </div>
                       </s:div>
                       <s:div styleClass="pageresults" rendered="#{itemCount > batchSize}">
                       <s:link styleClass="middle" action="#{next}" value="#{firstItem + batchSize + 1} ... #{itemCount <= firstItem + (batchSize * 2) ? itemCount : firstItem + (batchSize * 2)}"></s:link>
                       </s:div>
                       <s:div styleClass="pageresults" rendered="#{itemCount > (batchSize * 2)}">
                       <s:link styleClass="middle" action="#{next}" value="#{firstItem + 21} ... #{itemCount <= firstItem + 30 ? itemCount : firstItem + batchSize + (batchSize * 2)}"></s:link>
                       </s:div>
                       </s:div>
                      ....
                      


                      the dynamic s:link is found at :
                      <s:link styleClass="middle" action="#{next}" ...

                      In my head I think it won't be possible, unless maybe constructing a <a href manually, but anyone done it?

                      • 8. Re: Pageflow problems with back button
                        jbeaken

                        oops, please ignore last post, wrong place!