[jboss-user] [JBoss Seam] - does seam ignore generics in lists?

binabik do-not-reply at jboss.com
Wed Sep 5 13:59:00 EDT 2007


hi all,

following _very_ strange behaviour:

in a SFSB i have 3 lists defined as follows:



  | [...]
  | @Out (required=false)
  | private List<TimetableItem> bscLectures;
  | @Out (required=false)
  | private List<TimetableItem> bscPracticals;
  | private List<TimetableItem> selectedBscLectures;
  | [...]
  | 

in a .xhtml file:

  | <h:selectManyCheckbox id="lectureBscList"
  |     value="#{timetable.selectedBscLectures}" layout="pageDirection">
  |     <s:selectItems value="#{timetable.bscLectures}" var="lecture"
  |         label="#{lecture.title} (#{lecture.type}): #{lecture.times}" />
  | </h:selectManyCheckbox>
  | [...]
  | <h:dataTable id="bscPracticalList" var="bscPr"
  |     value="#{timetable.bscPracticals}"
  |     rendered="#{not empty timetable.bscPracticals}">
  |     <h:column>
  |         #{bscPr.title}
  |     </h:column>
  |     <h:column>
  |         <h:selectOneMenu value="#{bscPr.selected}">
  |             <s:selectItems value="#{bscPr.times}" var="n" 
  |                 label="#{n.toShortString()}" 
  |                 noSelectionLabel="Please select..."/>
  |         </h:selectOneMenu>
  |     </h:column>
  | </h:dataTable>
  | 

TimetableItem is not an Entity Bean, it's a helper class i've mashed together, with the following fields:

  | private String title;
  | private String type;
  | private List<TimetableItemTime> times;
  | private Object selected; // this should be a TimetableItem as well
  | 

i realised that i've got some problems somewhere when i tried the following:


  | for (TimetableItem t : this.selectedBscLectures)
  | 	System.out.println(t.toString())); // changed for ease of reading
  | 

and it was giving me ClassCastExceptions. The SelectOneMenu's were doing the same thing on TimetableItem.selected, which is why i changed that to an Object. After investigating further, i found out that my List selectedBscLectures is actually populated with Strings.

2 questions:
1.) why strings?
2.) why isn't the JVM screaming loudly about violations of the Generics?

[i may have an answer for 2.):]
constructs like this aren't caught by the java compiler, but do cause ClassCastExceptions at runtime.

  | import java.util.*;
  | 
  | public class Test {
  |   public static void main(String args[]) {
  |     ArrayList<Integer> integerList = new ArrayList<Integer>();
  |     integerList.add(1);
  |     Object o = new String("Simon!");
  |     integerList.add((Integer)o);
  |   }
  | }
  | 

now the interesting question is, where are the ClassCastExceptions which should be happening going? they're not in my server log...

[possible answer to 1.): i'm assuming because my beans aren't @Entity's, they have no @Id, which means that the JVM is using the toString() to identify them (the value of checkbox is a string representation of the object), and passing this into the Lists. but how do i avoid this?]

regards,
sb

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

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



More information about the jboss-user mailing list