[jbossseam-issues] [JBoss JIRA] Commented: (JBSEAM-1770) Infinite loop when in some pages.xml configuration

Pete Muir (JIRA) jira-events at lists.jboss.org
Sat Mar 1 08:20:58 EST 2008


    [ http://jira.jboss.com/jira/browse/JBSEAM-1770?page=comments#action_12401051 ] 
            
Pete Muir commented on JBSEAM-1770:
-----------------------------------

Can you provide an attached app which shows this? It needs to have an ant script which we can use to build and deploy to JBoss AS with HSQL as the database.

> Infinite loop when in some pages.xml configuration
> --------------------------------------------------
>
>                 Key: JBSEAM-1770
>                 URL: http://jira.jboss.com/jira/browse/JBSEAM-1770
>             Project: JBoss Seam
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.0.0.BETA1
>         Environment: windows XP, RHEL 5.0
>            Reporter: Richard Leherpeur
>         Assigned To: Pete Muir
>
> You can download this example on the Seam web site: navigation.zip
> I have the following classes:
> Code:
> @Name("user")
> @Scope(ScopeType.CONVERSATION)
> public class User implements Serializable {
> 	private String pet;
> 	public String getPet() {
> 	  return pet;
> 	}
> 	public void setPet(String pet) {
> 	  this.pet = pet;
> 	}
> }
> 	
> Code:
> @Name("navigation")
> @Scope(ScopeType.CONVERSATION)
> public class Navigation implements Serializable {
> 	@In(required=true)
> 	User user;
> 	@Logger
> 	private Log log;
> 	public String animalOutcome(){
> 		if (user == null){
> 			return "Dog"; // Just to make sure we don't return null
> 		}
> 		log.info("********* Outcome: " + user.getPet());
> 		return user.getPet();
> 	}
> 	public User getUser() {
> 	  return user;
> 	}
> 	public void setUser(User user) {
> 	  this.user = user;
> 	}
> }
> 	
> Code:
> @Name("animals")
> public class AnimalList
> {
>    private List<String> animals;
>    
>    @Unwrap
>    public List<String> unwrap()
>    {
>       if (animals == null)
>       {
>          animals = new ArrayList<String>();
>          animals.add("Dog");
>          animals.add("Cat");
>          animals.add("Goldfish");
>          animals.add("Rabbit");
>          animals.add("Snake");
>          animals.add("Parrot");
>       }
>       return animals;
>    }
> }
> 	
> Pages.xhtml is defined as followed:
> Code:
> <pages xmlns="http://jboss.com/products/seam/pages"
>        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>        xsi:schemaLocation="http://jboss.com/products/seam/pages http://jboss.com/products/seam/pages-2.0.xsd">
>    <page view-id="/pageOne.xhtml">
>       <begin-conversation join="true" pageflow="navigation" />
>    </page>
> 	<page view-id="/animalPage.xhtml" action="#{navigation.animalOutcome}">
> 		<navigation>
> 		    <rule if-outcome="Dog">
> 			<redirect view-id="/animal/dog.xhtml"/>
> 		    </rule>
> 		    <rule if-outcome="Cat">
> 			<redirect view-id="/animal/cat.xhtml"/>
> 		    </rule>
> 		    <rule if-outcome="Goldfish">
> 			<redirect view-id="/animal/goldfish.xhtml"/>
> 		    </rule>
> 		    <rule if-outcome="Rabbit">
> 			<redirect view-id="/animal/rabbit.xhtml"/>
> 		    </rule>
> 		    <rule if-outcome="Snake">
> 			<redirect view-id="/animal/snake.xhtml"/>
> 		    </rule>
> 		    <rule if-outcome="Parrot">
> 			<redirect view-id="/animal/parrot.xhtml"/>
> 		    </rule>
> 		</navigation>
> 	</page>
>   
> </pages>
> 	
> The pageflow is defined as:
> Code:
> <pageflow-definition 
> 	xmlns="http://jboss.com/products/seam/pageflow"
> 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>     	xsi:schemaLocation="http://jboss.com/products/seam/pageflow http://jboss.com/products/seam/pageflow-2.0.xsd"
> 	name="navigation">
>    
>    <start-page name="displayChoice" view-id="/pageOne.xhtml">
>       <redirect/>
>       <transition name="next" to="animalPage" />
>    </start-page>
>    <page name="animalPage" view-id="/animalPage.xhtml">
>       <end-conversation/>
>       <redirect/>
>    </page>
>    
> </pageflow-definition>
> 	
> And finally the pageOne.xhtml:
> Code:
> <html xmlns="http://www.w3.org/1999/xhtml"
>       xmlns:c="http://java.sun.com/jstl/core"
> 	  xmlns:ui="http://java.sun.com/jsf/facelets"
> 	  xmlns:h="http://java.sun.com/jsf/html"
> 	  xmlns:f="http://java.sun.com/jsf/core"
>       	  xmlns:s="http://jboss.com/products/seam/taglib">
>    <head>
>       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
>       <title>Test Navigation</title>
>    </head>
>    <body>
>       <div id="container">
> 	   <h3>Choose an animal</h3>
> 	   <h:form>
> 		<h:selectOneMenu value="#{user.pet}">
> 			<s:selectItems value="#{animals}" var="animal" label="#{animal}" noSelectionLabel="Select your pet"/>
> 		</h:selectOneMenu>
> 		<h:commandButton value="Go To Pet Page" action="next" />
> 	   </h:form>
>       </div>
>    </body>
> </html>
> 	
> When I select an animal, I get the following stacktrace:
> Code:
> INFO: Added Library from: jar:file:/C:/Jboss/jboss-4.2.0.GA/server/default/tmp/d
> eploy/tmp50163navigation.ear-contents/navigation-exp.war/WEB-INF/lib/jsf-facelet
> s.jar!/META-INF/jstl-core.taglib.xml
> 13:23:07,046 INFO  [Navigation] ********* Outcome: Cat
> 13:23:07,218 INFO  [Navigation] ********* Outcome: Cat
> 13:23:07,281 INFO  [Navigation] ********* Outcome: Cat
> 13:23:07,359 INFO  [Navigation] ********* Outcome: Cat
> 13:23:07,437 INFO  [Navigation] ********* Outcome: Cat
> 13:23:07,515 INFO  [Navigation] ********* Outcome: Cat
> 13:23:07,609 INFO  [Navigation] ********* Outcome: Cat
> 13:23:07,687 INFO  [Navigation] ********* Outcome: Cat
> 13:23:07,781 INFO  [Navigation] ********* Outcome: Cat
> 13:23:07,859 INFO  [Navigation] ********* Outcome: Cat
> 1:
> Code:
> <page view-id="/animalPage.xhtml">
> 	<navigation evaluate="#{navigation.outcome}">
> ...
> 	
> where #{navigation.outcome} returns outcome
> -> redirection to /animalPage.xhtml (which doesn't exist) because evaluate EL expression is never called
> 2:
> Code:
> <page view-id="/animalPage.xhtml" action="#{navigation.animalOutcome}">
> 	<navigation evaluate="#{navigation.outcome}">
> ...
> 	
> where #{navigation.animalOutcome} returns void and #{navigation.outcome} returns outcome
> -> We enter a loop where action expression is called then evaluate expression is called, etc....
> 3:
> Code:
> <page view-id="/animalPage.xhtml" action="#{navigation.animalOutcome}">
> 	<navigation from-action="#{navigation.animalOutcome}">
> ...
> 	
> where #{navigation.animalOutcome} returns outcome
> -> We enter a loop where action expression is called indefinitely
> 4:
> Code:
> <page view-id="/animalPage.xhtml" action="#{navigation.animalOutcome}">
> 	<navigation>
> ...
> 	
> where #{navigation.animalOutcome} returns outcome
> -> We enter a loop where action expression is called indefinitely

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the seam-issues mailing list