Problem accessing elements of Collection inside logic:iterate (II)

2005-06-27 Thread Riemann Robert \(Platinion\)
Hello everyone,

(a second post since my mail editor just made the posting unreadable...
sorry!)

I need your help with a tricky problem, where I do not see any explanation
currently:

I try to construct a table with all data items stored in a database using
Hibernate.
There is a Form bean for the data items themselves and a form bean with a
Collection (ArrayList) with the list of all such data items.

Here is the relevant JSP code 
... 
logic:present name=InterfacesOverviewForm
logic:notEmpty name=InterfacesOverviewForm property=interfacesItems
  table
logic:iterate id=InterfacesOverviewData 
 name=InterfacesOverviewForm 
 property=interfacesItems
 type=Presentation.form.InterfacesInputForm
  tr
 td
!-- put a property of the interfaces item in table cell --
html:text name=InterfacesOverviewData 
   property=mainId size=2/ !-- (**) --


/logic:notEmpty
logic:empty name=InterfacesOverviewForm 
 property=interfacesItems
   No Interfaces data items stored yet. br /
/logic:empty
/logic:present
logic:notPresent name=InterfacesOverviewForm
   No Interfaces data items available. br /
/logic:notPresent

In my OverviewInterfacesAction I do the following:

... 
 // read data from the persistence layer 
 Collection lDTOList = lService.readData(); 
 // the list of form beans
 ArrayList lFormInterfacesList = new ArrayList(); 
 // convert DTO's to form beans 
 lFormInterfacesList = (ArrayList) convert(lDTOList); 
 // set the form bean collection into the form
 lForm.setInterfacesItems(lFormInterfacesList); 
 // place the form with the collection into the request
 pRequest.setAttribute(InterfacesOverviewForm,lForm); 
 // done
 return (pMapping.findForward(Constants.SUCCESS)); 
}

I would expect that in my JSP, The iterate gets in each iteration one form
after the other out of the collection and that I have access to the
properties of the collection elements as in line (**) 

Unfortunately there are two effects that I cannot explain:
1) With the code as above I get an Exception stating, that bean
InterfacesOverviewData cannot be found in any scope


2) If I start the JSP with a 
   bean:define id=InterfacesOverviewData
  name=InterfacesOverviewForm
  type=Presentation.form.InterfacesOverviewForm/
  I still get a different exception, but this time stating, that there is no
  getter method for property mainId in form InterfacesOverviewForm, which is
  correct since that form contains a Collection with elements which all have
  a property mainId and getter getMainId().

3) If I try to access the Collection instead of a property in line (**),
  i.e. I change the line to:
  html:text name=InterfacesOverviewData 
 property=interfacesItems
 size=150/
 Then I see the the ArrayList printed (I provided a toString() method in the
 InterfacesInputForm (i.e. the form which represents an element of the
 Collection), thoug obviously the Collection is there and can be accessed.  

4) A further observation which I cannot explain might indicate that the
  heart of my error in not caused by the logic:iterate tag itself: 
  both branches of the surrounding logic:present and logic:empty checks,
 i.e.,logic:present and logic:notPresent and logic:empty and logic:notEmpty
 are executed (with the code as described until (3)) 


Any help or hint is highly appreciated!


Thanks in advanced 
Robert

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Problem accessing elements of Collection inside logic:iterate (II)

2005-06-27 Thread Laurie Harper

Riemann Robert (Platinion) wrote:


Hello everyone,

(a second post since my mail editor just made the posting unreadable...
sorry!)

I need your help with a tricky problem, where I do not see any explanation
currently:

I try to construct a table with all data items stored in a database using
Hibernate.
There is a Form bean for the data items themselves and a form bean with a
Collection (ArrayList) with the list of all such data items.

Here is the relevant JSP code 
... 
logic:present name=InterfacesOverviewForm

logic:notEmpty name=InterfacesOverviewForm property=interfacesItems
  table
logic:iterate id=InterfacesOverviewData 
 name=InterfacesOverviewForm 
 property=interfacesItems

 type=Presentation.form.InterfacesInputForm
  tr
 td
!-- put a property of the interfaces item in table cell --
html:text name=InterfacesOverviewData 
   property=mainId size=2/ !-- (**) --



/logic:notEmpty
logic:empty name=InterfacesOverviewForm 
 property=interfacesItems

   No Interfaces data items stored yet. br /
/logic:empty
/logic:present
logic:notPresent name=InterfacesOverviewForm
   No Interfaces data items available. br /
/logic:notPresent

In my OverviewInterfacesAction I do the following:

... 
 // read data from the persistence layer 
 Collection lDTOList = lService.readData(); 
 // the list of form beans
 ArrayList lFormInterfacesList = new ArrayList(); 
 // convert DTO's to form beans 
 lFormInterfacesList = (ArrayList) convert(lDTOList); 
 // set the form bean collection into the form
 lForm.setInterfacesItems(lFormInterfacesList); 
 // place the form with the collection into the request
 pRequest.setAttribute(InterfacesOverviewForm,lForm); 
 // done
 return (pMapping.findForward(Constants.SUCCESS)); 
}


I would expect that in my JSP, The iterate gets in each iteration one form
after the other out of the collection and that I have access to the
properties of the collection elements as in line (**) 


Unfortunately there are two effects that I cannot explain:
1) With the code as above I get an Exception stating, that bean
InterfacesOverviewData cannot be found in any scope


Maybe convert() is returning null?

2) If I start the JSP with a 
   bean:define id=InterfacesOverviewData

  name=InterfacesOverviewForm
  type=Presentation.form.InterfacesOverviewForm/
  I still get a different exception, but this time stating, that there is no
  getter method for property mainId in form InterfacesOverviewForm, which is
  correct since that form contains a Collection with elements which all have
  a property mainId and getter getMainId().


Yes, but your bean:define binds IngerfacesOverviewData to an instance of 
interfacesOverviewForm, not to the element type.


3) If I try to access the Collection instead of a property in line (**),
  i.e. I change the line to:
  html:text name=InterfacesOverviewData 
 property=interfacesItems

 size=150/
 Then I see the the ArrayList printed (I provided a toString() method in the
 InterfacesInputForm (i.e. the form which represents an element of the
 Collection), thoug obviously the Collection is there and can be accessed.  


With or without the bean:define? Shouldn't that be 
name=InterfacesOverviewForm?


4) A further observation which I cannot explain might indicate that the
  heart of my error in not caused by the logic:iterate tag itself: 
  both branches of the surrounding logic:present and logic:empty checks,

 i.e.,logic:present and logic:notPresent and logic:empty and logic:notEmpty
 are executed (with the code as described until (3)) 


That sounds a bit odd... I'd suggest adding some debugging code to the JSP to 
print out everything in the various scopes to make sure everything's as you 
expect it.

L.
--
Laurie, Open Source advocate, Java geek and novice blogger:
http://www.holoweb.net/~laurie/


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]