[jboss-user] [JBoss Seam] - Problems Nesting <h:dataTable>

gzoller do-not-reply at jboss.com
Sat Feb 17 20:05:45 EST 2007


I'm trying to nest <h:dataTable> with <s:link> elements without success.  Actually I can render a 2-level nested data table but if I click on the innermost links I get null passed to the action method.  Clicking on the top-level links works fine and the expected objects are passed tomy action method.  Frustrating!

The rendered nested tables look something like this (everything rendered is a clickable s:link element--bold represents the outer table and regular text the inner nested tables):

  | One
  |     Big Projects
  |     Small Projects
  | Two
  |     Hot
  |     Cold
  | Three
  |     Misc
  | 

A list of trivial Blah objects holds the One/Two/Three.  Each Blah also has a list of Bucket objects.  This is supposed to simulate a 1-to-m Entity relationship loaded from a database.  I also have a stateful session bean, Year, that manages things.  

Here's the important clip from my xhtml that renders the tables.

  | <h:dataTable id="outerTable"
  | 	var="z"
  | 	value="#{list}">
  | 	<h:column>
  | 	<s:link value="#{outer.name}" action="#{year.selectItem(outer)}"/>
  | 	<h:dataTable id="innerTable" 
  |                var="inner" 
  |                value="#{outer.buckets}">
  | 		<h:column>
  | 			<s:link value="#{inner.name}" action="#{year.selectBucket(inner)}"/>
  | 		</h:column>
  | 	</h:dataTable>
  | 	</h:column>
  | </h:dataTable>
  | 

Here are the important bits from Year.java

  | @Stateful
  | @Name("year")
  | @Scope(ScopeType.SESSION)
  | public class YearBean implements Year {
  | 	@DataModel
  | 	private List<Blah> list;
  | 
  | 	@Create
  | 	public void init() {
  | 		// Create & populate 2-tier data structure simulating loaded Entites
  | 		list = new ArrayList<Blah>();
  | 		List<Bucket> b = new ArrayList<Bucket>();
  | 		  b.add( new Bucket("Big Projects"));
  | 		  b.add( new Bucket("Small Projects"));
  | 		list.add(new Blah("One",b));
  | 
  | 		b = new ArrayList<Bucket>();
  | 		  b.add( new Bucket("Hot"));
  | 		  b.add( new Bucket("Cold"));
  | 		list.add(new Blah("Two",b));
  | 
  | 		b = new ArrayList<Bucket>();
  | 		  b.add( new Bucket("Misc"));
  | 		list.add(new Blah("Three",b));
  | 	}
  | 
  | 	public String selectBucket(Bucket bucket) {
  | 		if( bucket == null )
  | 			System.out.println("+++>>> Null Bucket Selected! ");
  | 		else
  | 			System.out.println("++++>>> Bucket selected: " + bucket.getName());
  | 		return "bucket";
  | 	}
  | 	
  | 	public String selectItem(Blah blah) {
  | 		if( blah == null )
  | 			System.out.println("+++>>> Null Blah Selected! ");
  | 		else
  | 			System.out.println("++++>>> Blah selected: " + blah.getName());
  | 		return "blah";
  | 	}
  | 
  | }
  | 

And finally Blah.java and Bucket.java:

  | @Name("blah")
  | public class Blah {
  | 	private String name;
  | 	
  | 	@DataModel
  | 	private List<Bucket> buckets;
  | 	
  |         public Blah(){}
  |     
  | 	public Blah(String name, List<Bucket> buckets) { 
  | 		this.name = name; 
  | 		this.buckets = buckets;
  | 	}
  | 	public String getName() { return name; }
  | 	public List<Bucket> getBuckets() { return buckets; }    
  | }
  | 
  | 
  | @Name("bucket")
  | public class Bucket {
  | 	private String name;
  | 
  |         public Bucket(){}
  |     
  | 	public Bucket(String name) { 
  | 		this.name = name; 
  | 	}
  | 	public String getName() { return name; }
  | }
  | 
  | 

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4018347#4018347

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4018347



More information about the jboss-user mailing list