14 Replies Latest reply on May 24, 2007 11:29 PM by zwu_ca

    Newbei question: Page navigation

    zwu_ca

      I have a problem like this: If user opens a page: http://my/link.seam?a=3 and if user has not logged on, it will redirect the link to http://my/home.seam. After user enters correct credentials and hits "Login" button, the page should go back to http://my/link.seam?a=3. How this logic can be implemented is Seam?

      Any tips will be much appreciated.

        • 1. Re: Newbei question: Page navigation
          • 2. Re: Newbei question: Page navigation
            zwu_ca

            Thanks a lot: Almost worked -- how ever it lost the request string "?a=15" in the original url. Any more tip?

            • 3. Re: Newbei question: Page navigation
              gavin.king

              Declare the parameter as a seam page parameter.

              • 4. Did this -- but not working (Re: Newbei question: Page navig
                zwu_ca


                Thanks for help -- this has been driving me crazy (more than 12 hours have been spent -- a newbie in Seam).

                I think I did do this: Could you look at what's wrong with the navigation (I also include the related Java code). Your help will be much appreciated.





                <page view-id="/home.xhtml">


                <redirect view-id="/itemlist.xhtml"/>




                <page view-id="/itemlist.xhtml" login-required="true" >

                <navigation from-action="#{hotelBooking.cancel}">
                <redirect view-id="/main.xhtml"/>




                import javax.ejb.*;
                /**
                *
                * @author WuZX
                */
                @Local
                public interface Itemlist
                {
                UploadedData getData();
                String getMe();
                void setMe(String me);
                /*
                public void setDamn(String id);
                public String getDamn();
                */
                public void destroy();

                }


                /**
                *
                * @author WuZX
                */
                import static org.jboss.seam.ScopeType.STATELESS;

                import org.jboss.seam.annotations.In;
                import org.jboss.seam.annotations.Name;
                import org.jboss.seam.annotations.Out;
                import org.jboss.seam.annotations.Factory;
                import org.jboss.seam.annotations.RequestParameter;
                import org.jboss.seam.annotations.Create;
                import org.jboss.seam.annotations.Destroy;
                import javax.ejb.Remove;
                import javax.ejb.*;

                import org.jboss.logging.Logger;
                import javax.persistence.EntityManager;
                import javax.persistence.PersistenceContext;


                @Stateful
                @Name("itemlist")

                //@Scope(STATELESS)
                public class ItemlistAction implements Itemlist {

                //@In String id;

                // private UploadedData uploadedData;

                @PersistenceContext
                private EntityManager em;


                @RequestParameter("id")

                private String id;

                private static final Logger log = Logger.getLogger(ItemlistAction.class);
                static
                {
                log.info("loading?****************");
                }

                /*public String getData()
                {

                return "data" + id;
                }*/
                //@Out
                //@Factory("uploadedData")
                public UploadedData getData()
                {
                log.info("get here" + id);

                if (id == null )
                {
                //UploadedData uploadedData = new UploadedData();
                //uploadedData.setTesting("testing");
                return null;
                }
                return em.find(UploadedData.class, new Long(id));

                }

                public String getMe()
                {
                return id;
                }

                public void setMe(String me)
                {
                id = me;
                }
                public int getDataID()
                {
                return 3;
                /* try
                {
                if (id != null)
                return Integer.parseInt(id);
                }
                catch(Exception e)
                {

                }
                return 0;
                */
                }

                @Destroy @Remove
                public void destroy() {}
                }

                • 5. Page navigation part resent  (Re: Newbei question: Page navi
                  zwu_ca

                  Sorry I didn't put the

                  tag, which caused the text uncomprensive.
                  Here I tried. The java code is in previous posting.
                  
                  
                  <page view-id="/home.xhtml">
                   <navigation>
                   <rule if="#{identity.loggedIn}">
                   <redirect view-id="/itemlist.xhtml"/>
                   </rule>
                   </navigation>
                  
                   </page>
                   <page view-id="/itemlist.xhtml" login-required="true" >
                   <param name="id" value="#{itemlist.me}" />
                   <navigation from-action="#{hotelBooking.cancel}">
                   <redirect view-id="/main.xhtml"/>
                   </navigation>
                   </page>
                  


                  • 6. Re: Newbei question: Page navigation
                    gavin.king

                    I don't see any page parameter declaration in pages.xml.

                    http://docs.jboss.com/seam/1.2.1.GA/reference/en/html/events.html#d0e3803

                    • 7. Re: Newbei question: Page navigation
                      gavin.king

                      There needs to be

                      <param name="a" value="...."/>


                      • 8. Didn't get it: Re: Newbei question: Page navigation
                        zwu_ca

                        Thanks again for the help: I didn't get what you meant with

                        <param name="a" value="...."/>
                        


                        The param I had is 'id' and I had the line:
                        <param name="id" value="#{itemlist.me}" />
                        


                        Did I put the line in a wrong place?


                        • 9. Re: Newbei question: Page navigation
                          gavin.king

                          In your original post, you typed "a". Which is it?

                          • 10. Re: Newbei question: Page navigation
                            zwu_ca

                            First I am so thankful you are so patient and so willing to help -- very rarely.

                            I don't see 'a' anywhere in the original code posting. I forgot to use the 'code' html tag in the original code. There might be some confusion there (you might have different views from mine?). I will try to post the code again here (hopefully this time it can be resolved ).

                            
                             <page view-id="/home.xhtml">
                            
                             <navigation>
                             <rule if="#{identity.loggedIn}">
                             <redirect view-id="/itemlist.xhtml"/>
                             </rule>
                             </navigation>
                            
                             </page>
                             <page view-id="/itemlist.xhtml" login-required="true" >
                             <param name="id" value="#{itemlist.me}" />
                             <navigation from-action="#{hotelBooking.cancel}">
                             <redirect view-id="/main.xhtml"/>
                             </navigation>
                             </page>
                            
                            import javax.ejb.*;
                            /**
                             *
                             * @author WuZX
                             */
                            @Local
                            public interface Itemlist
                            {
                             UploadedData getData();
                             String getMe();
                             void setMe(String me);
                             /*
                             public void setDamn(String id);
                             public String getDamn();
                             */
                             public void destroy();
                            
                            }
                            
                            
                            
                            /**
                             *
                             * @author WuZX
                             */
                            import static org.jboss.seam.ScopeType.STATELESS;
                            
                            import org.jboss.seam.annotations.In;
                            import org.jboss.seam.annotations.Name;
                            import org.jboss.seam.annotations.Out;
                            import org.jboss.seam.annotations.Factory;
                            import org.jboss.seam.annotations.RequestParameter;
                            import org.jboss.seam.annotations.Create;
                            import org.jboss.seam.annotations.Destroy;
                            import org.jboss.seam.annotations.Scope;
                            import javax.ejb.Remove;
                            import javax.ejb.*;
                            import static org.jboss.seam.ScopeType.*;
                            
                            import org.jboss.logging.Logger;
                            import javax.persistence.EntityManager;
                            import javax.persistence.PersistenceContext;
                            
                            
                            @Stateful
                            @Name("itemlist")
                            @Scope(EVENT)
                            public class ItemlistAction implements Itemlist {
                            
                             //@In String id;
                            
                             // private UploadedData uploadedData;
                            
                             @PersistenceContext
                             private EntityManager em;
                            
                            
                             @RequestParameter("id")
                             private String me;
                            
                             private static final Logger log = Logger.getLogger(ItemlistAction.class);
                             static
                             {
                             log.info("loading?****************");
                             }
                            
                             /*public String getData()
                             {
                            
                             return "data" + id;
                             }*/
                             //@Out
                             //@Factory("uploadedData")
                             public UploadedData getData()
                             {
                             log.info("get here" + me);
                            
                             if (me == null )
                             {
                             //UploadedData uploadedData = new UploadedData();
                             //uploadedData.setTesting("testing");
                             return null;
                             }
                             return em.find(UploadedData.class, new Long(me));
                            
                             }
                            
                             public String getMe()
                             {
                             log.info("===============get me " + me);
                            
                             return me;
                             }
                            
                             public void setMe(String me)
                             {
                             log.info("================= set me here" + me);
                            
                             this.me = me;
                             }
                             public int getDataID()
                             {
                             return 3;
                             /* try
                             {
                             if (id != null)
                             return Integer.parseInt(id);
                             }
                             catch(Exception e)
                             {
                            
                             }
                             return 0;
                             */
                             }
                            
                             @Destroy @Remove
                             public void destroy() {}
                            }
                            
                            
                            


                            • 11. Re: Newbei question: Page navigation
                              gavin.king

                              You typed:

                              If user opens a page: http://my/link.seam?a=3 and if user has not logged on, it will redirect the link to http://my/home.seam. After user enters correct credentials and hits "Login" button, the page should go back to http://my/link.seam?a=3. How this logic can be implemented is Seam?


                              Almost worked -- how ever it lost the request string "?a=15" in the original url.


                              Well, I don't see the following in your pages.xml:

                              <event type="org.jboss.seam.notLoggedIn">
                               <action expression="#{redirect.captureCurrentView}"/>
                              </event>
                              
                              <event type="org.jboss.seam.postAuthenticate">
                               <action expression="#{redirect.returnToCapturedView}"/>
                              </event>


                              • 12. I did have the lines: Re: Newbei question: Page navigation
                                zwu_ca

                                As I said, it did go back to the pag but with Query String cut off. I wanted the origignal link "http://my/itemlist.seam?id=20" instead of "http://my/itemlist.seam?cid=3". PLEASE NOTE the 'cid' is the generic Query Parameter, not my 'id'.

                                If I hadn't the two lines, it would have gone back at all.


                                This is the complete file:

                                <!DOCTYPE pages PUBLIC
                                 "-//JBoss/Seam Pages Configuration DTD 1.2//EN"
                                 "http://jboss.com/products/seam/pages-1.2.dtd">
                                
                                <pages no-conversation-view-id="/main.xhtml"
                                 login-view-id="/home.xhtml">
                                
                                
                                 <page view-id="/uploadResponse.xhtml">
                                 <param name="pid" value="#{personDao.id}"
                                 converterId="javax.faces.Long"/>
                                 </page>
                                 <page view-id="/register.xhtml">
                                
                                 <action if="#{validation.failed}"
                                 execute="#{register.invalid}"/>
                                
                                 <navigation>
                                 <rule if="#{register.registered}">
                                 <redirect view-id="/home.xhtml"/>
                                 </rule>
                                 </navigation>
                                
                                 </page>
                                
                                 <page view-id="/home.xhtml">
                                
                                 <navigation>
                                 <rule if="#{identity.loggedIn}">
                                 <redirect view-id="/itemlist.xhtml"/>
                                 </rule>
                                 </navigation>
                                
                                 </page>
                                 <page view-id="/itemlist.xhtml" login-required="true" >
                                 <param name="id" value="#{itemlist.me}" />
                                 <navigation from-action="#{hotelBooking.cancel}">
                                 <redirect view-id="/main.xhtml"/>
                                 </navigation>
                                 </page>
                                 <page view-id="/password.xhtml"
                                 login-required="true">
                                
                                 <navigation>
                                 <rule if="#{changePassword.changed}">
                                 <redirect view-id="/main.xhtml"/>
                                 </rule>
                                 </navigation>
                                
                                 </page>
                                
                                 <page view-id="/main.xhtml"
                                 login-required="true">
                                
                                 <navigation from-action="#{hotelBooking.selectHotel(hot)}">
                                 <redirect view-id="/hotel.xhtml"/>
                                 </navigation>
                                
                                 <navigation from-action="#{bookingList.cancel}">
                                 <redirect/>
                                 </navigation>
                                
                                 </page>
                                
                                 <page view-id="/hotel.xhtml">
                                
                                 <description>View hotel: #{hotel.name}</description>
                                
                                 <navigation from-action="#{hotelBooking.bookHotel}">
                                 <redirect view-id="/book.xhtml"/>
                                 </navigation>
                                
                                 </page>
                                
                                 <page view-id="/book.xhtml">
                                
                                 <description>Book hotel: #{hotel.name}</description>
                                
                                 <navigation from-action="#{hotelBooking.setBookingDetails}">
                                 <rule if="#{hotelBooking.bookingValid}">
                                 <redirect view-id="/confirm.xhtml"/>
                                 </rule>
                                 </navigation>
                                
                                 </page>
                                
                                 <page view-id="/confirm.xhtml">
                                
                                 <description>Confirm booking: #{booking.description}</description>
                                
                                 <navigation from-action="#{hotelBooking.confirm}">
                                 <redirect view-id="/main.xhtml"/>
                                 </navigation>
                                
                                 </page>
                                
                                 <page view-id="*">
                                
                                 <navigation from-action="#{identity.logout}">
                                 <redirect view-id="/home.xhtml"/>
                                 </navigation>
                                
                                 <navigation from-action="#{hotelBooking.cancel}">
                                 <redirect view-id="/main.xhtml"/>
                                 </navigation>
                                
                                 </page>
                                
                                
                                 <event type="org.jboss.seam.notLoggedIn">
                                 <action expression="#{redirect.captureCurrentView}"/>
                                 </event>
                                
                                <event type="org.jboss.seam.postAuthenticate">
                                 <action expression="#{redirect.returnToCapturedView}"/>
                                </event>
                                
                                 <exception class="org.jboss.seam.security.NotLoggedInException">
                                 <redirect view-id="/home.xhtml">
                                 <message severity="warn">You must be logged in to use this feature</message>
                                 </redirect>
                                 </exception>
                                
                                </pages>
                                


                                • 13. About the 'a' --Re: Newbei question: Page navigation
                                  zwu_ca


                                  Oh, you meant the 'a' in the very first posting. That's what I wanted to get an idea how this could be done. Then I tried my actual things and then they didn't work as I wanted, then I went to implementation details : When you talked about 'a' and I forgot the 'a' in the very first posting. But this still has not been resolved. I reluctantly (because you had lots of time with me already) asked you to help again.

                                  • 14. Finally Got it: Page navigation
                                    zwu_ca

                                    Got it now -- I don't think it was not so nice : several internal redirections may have happens (since I can see the get and set methods called several times). In order not to lost the value of my bean variable, I have to let it not be set if the Query variable is null.

                                    I think this part of the implementation of SEAM is problemlic, or at least not very nice.