• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

nested:iterate with hibernate objects

 
Ranch Hand
Posts: 41
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I have two hibernate objects (JobApplication, JobApplicationComments). It's a one-to-many relationship. The JobApplication contains the following.

private Set jobApplicationComments = new HashSet(0);.

The JobApplicaitonComments has the following fields...

private Long commentsId;
private JobApplication jobApplication;
private String comments;
private Date createdDate;
private String createdBy;


I retreive a JobApplication from the database and can verify this using log4j. However when I use the nested:iterate I get the following error.

javax.servlet.ServletException: Invalid argument looking up property jobApplicationComments[0].comments of bean jobApplication

Here is the code from the jsp...

<nested resent name="jobApplication">
<nested:root name="jobApplication">
<nested:write property="firstName"/> <nested:write property="lastName" /><br>
<nested:iterate property="jobApplicationComments" >
<nested:write property="comments" />
</nested:iterate>
</nested:root>
</nested resent>

Here is the code in my action that I used to verify the correct application and comments.

Iterator myComments = (Iterator)jobApplication.getJobApplicationComments().iterator();

while (myComments.hasNext()) {
JobApplicationComments comments = (JobApplicationComments) myComments.next();
logger.debug("Comments: " + comments.getComments());
}

What am I missing???
 
Ranch Hand
Posts: 4864
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
What you're missing is an indexed getter for jobApplicationComments. When you use an indexed property in your JSP such as jobApplicationComments[0].comments , Struts must be able to get a single JobApplicationComment for a given index.

This becomes problematic for you, because you are storing these objects in a HashSet.

Here's a quote from the HashSet javadoc:

This class implements the Set interface, backed by a hash table (actually a HashMap instance). It makes no guarantees as to the iteration order of the set; in particular, it does not guarantee that the order will remain constant over time.



Since a HashSet does not have any concept of ordering and objects are not retrieved in any order, I can't think of a way to create an indexed getter for this object.

You may want to consider changing this collection to an implementation of the java.util.List interface, since implementors of this interface have a get(int index) method.
reply
    Bookmark Topic Watch Topic
  • New Topic