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]

Reply via email to