Just based on your working example, shouldn't you be using:

  <nested:iterate id="element2" property="urls">

with id="element2" instead of name="element2"?


On Tue, 12 Oct 2004 19:49:28 +1000, Langdon Stevenson
<[EMAIL PROTECTED]> wrote:
> Hi
> 
> I am trying to output the contents of a set of nested Objects in a JSP
> page using the <nested> taglib.
> 
> I have three objects that are persisted using Hibernate:
> 
> 1. Student - (contains a HashSet of Project called 'projects')
> 2. Project - (contains a HashSet of Url called 'urls')
> 3. Url - (contains a string)
> 
> The Hibernate persistance seems to require the use of HashSets for
> sub-objects to work.  I have tried using an ArrayList, but get Hibernate
> errors.
> 
> I set a student bean in session scope in my action and then pass control
> to the jsp.  The jsp looks something like:
> 
> <nested:root name="adamh">
>   <nested:iterate id="element1" property="projects">
> 
>     <tr>
>       <td>
>         Name:
>       </td>
>       <td>
>         <nested:write name="element1" property="name"/>
>       </td>
>     </tr>
> 
>     <tr>
>       <td>
>         Query:
>       </td>
>       <td>
>         <nested:write name="element1" property="query"/>
>       </td>
>     </tr>
> 
>   </nested:iterate>
> </nested:root>
> 
> When I run the above jsp code, it works fine and prints the name and
> query string of the project below the student details.  However when I
> add the second level of iteration like this:
> 
> <nested:root name="adamh">
> 
>   <nested:iterate id="element1" property="projects">
> 
>     <tr>
>       <td>
>         Name:
>       </td>
>       <td>
>         <nested:write name="element1" property="name"/>
>       </td>
>     </tr>
> 
>     <tr>
>       <td>
>         Query:
>       </td>
>       <td>
>         <nested:write name="element1" property="query"/>
>       </td>
>     </tr>
> 
>     <nested:iterate name="element2" property="urls">
>       <tr>
>         <td>
>           <nested:write name="element2" property="url"/>
>         </td>
>       </tr>
>     </nested:iterate>
> 
>   </nested:iterate>
> </nested:root>
> 
> I get the following error:
> 
> javax.servlet.ServletException: Cannot find bean element2 in any scope
> 
> This makes sense (sort of), but leaves me with little clue as to what I
> should be doing instead.  All of the examples that I can find of using
> the <nested:iterate> tag say that I should use the form:
> 
> COMPANY: <html:text property="companyName"/>
> <nested:iterate property="departments">
>     Department: <nested:text property="deptName"/>
>         <nested:iterate property="employees">
>             Employee: <nested:text property="empName"/>
>             E-mail: <nested:text property="email"/>
>         </nested:iterate>
> </nested:iterate>
> 
> (this from the Struttin' with Struts tutorial -
> http://www.reumann.net/struts/nested.do)
> 
> However my reading of the iterate taglib docs say that with a HashTable
> I must use the id="something" property="object property" form.  As
> mentioned, that works fine for one level of nesting, but not multiple
> levels.
> 
> Any suggestions as to how I should be modifying my JSP?  Keeping in mind
> that Hibernate appears to limit me to using a HashMap to store my nested
> objects.  I expect that there is a simple answer, but can't for the life
> of me find it.
> 
> I am using Struts 1.1 with Tomcat 4.0.6 / 4.1 on Win2k
> 
> Full listing of relevent files below.
> 
> Any assistance greatly appreciated.
> 
> Regards,
> Langdon
> ---------------------
> 
> -- Student.java --
> package adamh;
> 
> import java.io.Serializable;
> import java.util.Date;
> import java.util.HashSet;
> import java.util.Set;
> 
> /**
>  * Created by IntelliJ IDEA.
>  * Student: langdons
>  * Date: 12/08/2004
>  * Time: 18:58:49
>  * To change this template use Options | File Templates.
>  */
> 
> public class Student implements Serializable {
>     private String id;
>     private String parentId;
>     private String emailAddress;
>     private String password;
>     private String nickname;
>     private String yearOfBirth;
>     private String country;
>     private String state;
>     private String gender;
>     private java.util.Date firstContact;
>     private String referredById;
>     private String agreeToRules;
>     private User user;
>     private Role role;
>     private Set projects = new HashSet();
> 
>     public String getId() {
>         return id;
>     }
> 
>     public void setId(String string) {
>          id = string;
>     }
> 
>     public String getParentId() {
>         return parentId;
>     }
> 
>     public void setParentId(String string) {
>          parentId = string;
>     }
> 
>     public String getEmailAddress() {
>         return emailAddress;
>     }
> 
>     public void setEmailAddress(String string) {
>          emailAddress = string;
>     }
> 
>     public String getPassword() {
>         return password;
>     }
> 
>     public void setPassword(String string) {
>          password = string;
>     }
> 
>     public String getNickname() {
>         return nickname;
>     }
> 
>     public void setNickname(String string) {
>          nickname = string;
>     }
> 
>     public String getyearOfBirth() {
>         return yearOfBirth;
>     }
> 
>     public void setYearOfBirth(String string) {
>          yearOfBirth = string;
>     }
> 
>     public String getCountry() {
>         return country;
>     }
> 
>     public void setCountry(String string) {
>          country = string;
>     }
> 
>     public String getState() {
>         return state;
>     }
> 
>     public void setState(String string) {
>          state = string;
>     }
> 
>     public String getGender() {
>         return gender;
>     }
> 
>     public void setGender(String string) {
>         gender = string;
>     }
> 
>     public Date getFirstContact() {
>         return firstContact;
>     }
> 
>     public void setFirstContact(Date date) {
>         firstContact = date;
>     }
> 
>     public String getReferredById() {
>         return referredById;
>     }
> 
>     public void setReferredById(String string) {
>         referredById = string;
>     }
> 
>     public String getAgreeToRules() {
>         return agreeToRules;
>     }
> 
>     public void setAgreeToRules(String string) {
>         agreeToRules = string;
>     }
> 
>     public User getUser() {
>         return user;
>     }
> 
>     public void setUser(User user) {
>         this.user = user;
>     }
> 
>     public Role getRole() {
>         return role;
>     }
> 
>     public void setRole(Role role) {
>         this.role = role;
>     }
> 
>     public Set getProjects() {
>         return this.projects;
>     }
> 
>     public void setProjects(Set project) {
>         this.projects = project;
>     }
> 
>     public void addProject(Project project) {
>         project.setStudent(this);
>         projects.add(project);
>     }
> 
> }
> 
> -- Project.java --
> 
> package adamh;
> 
> import java.util.Set;
> import java.util.HashSet;
> 
> /**
>  * Created by IntelliJ IDEA.
>  * User: langdons
>  * Date: 7/10/2004
>  * Time: 20:39:14
>  * To change this template use Options | File Templates.
>  */
> public class Project {
> 
>     private String id;
>     private String student_id;
>     private String name;
>     private String query;
>     private Student student;
>     private Set urls = new HashSet();
> 
>     public String getId() {
>         return id;
>     }
> 
>     public void setId(String string) {
>         id = string;
>     }
> 
>     public String getStudent_id() {
>         return student_id;
>     }
> 
>     public void setStudent_id(String string) {
>         student_id = string;
>     }
> 
>     public String getName() {
>         return name;
>     }
> 
>     public void setName (String string) {
>         name = string;
>     }
> 
>     public String getQuery () {
>         return query;
>     }
> 
>     public void setQuery (String string) {
>         query = string;
>     }
> 
>     public void setStudent(Student student){
>         this.student = student;
>     }
> 
>     public Student getStudent() {
>         return student;
>     }
> 
>     public Set getUrls() {
>         return urls;
>     }
> 
>     public void setUrls(Set set) {
>         this.urls = set;
>     }
> 
>     public void addUrls(Url url){
>         url.getProjects().add(url);
>         urls.add(url);
>     }
> }
> 
> -- Url.java --
> 
> package adamh;
> 
> import java.util.Set;
> import java.util.HashSet;
> 
> /**
>  * Created by IntelliJ IDEA.
>  * User: langdons
>  * Date: 7/10/2004
>  * Time: 21:13:35
>  * To change this template use Options | File Templates.
>  */
> 
> public class Url {
> 
>     private String id;
>     private String url;
>     private Set projects = new HashSet();
> 
>     public String getId() {
>         return id;
>     }
> 
>     public void setId(String string) {
>         id = string;
>     }
> 
>     public String getUrl() {
>         return url;
>     }
> 
>     public void setUrl (String string) {
>         url = string;
>     }
> 
>     public Set getProjects () {
>         return this.projects;
>     }
> 
>     public void setProjects (Set set) {
>         this.projects = set;
>     }
> }
> 
> -- home.jsp --
> 
> <%@ taglib uri="/tags/struts-html" prefix="html" %>
> <%@ taglib uri="/tags/struts-bean" prefix="bean" %>
> <%@ taglib uri="/tags/struts-nested" prefix="nested"%>
> 
> <html>
> <head>
> <title><bean:message key="studentHomePage.pageTitle" /></title>
> 
> </head>
> <body>
> <h1><bean:message key="studentHomePage.pageHeader" /></h1>
> 
>        <table>
> 
>         <tr>
>             <td colspan=2>
>                 <html:messages id="message" message="true">
>                     <%= message %>
>                 </html:messages>
>             </td>
>         </tr>
> 
>         <tr>
>             <td>
>                 <bean:message
> key="studentRegistrationWizard.referredById" />:
>             </td>
>             <td>
>                 <bean:write name="adamh" property="referredById" />
>             </td>
>         </tr>
>         <tr>
>             <td>
>                 <bean:message
> key="studentRegistrationWizard.emailAddress" />:
>             </td>
>             <td>
>                 <bean:write name="adamh" property="emailAddress" />
>             </td>
>         </tr>
>         <tr>
>             <td>
>                 <bean:message key="studentRegistrationWizard.password" />:
>             </td>
>             <td>
>                 <bean:write name="adamh" property="password" />
>             </td>
>         </tr>
>         <tr>
>             <td>
>                 <bean:message key="studentRegistrationWizard.nickname" />:
>             </td>
>             <td>
>                 <bean:write name="adamh" property="nickname" />
>             </td>
>         </tr>
>                <tr>
>                        <td>
>                                <bean:message 
> key="studentRegistrationWizard.yearOfBirth"/>
>                        </td>
>                        <td>
>                                <bean:write name="adamh" property="yearOfBirth" />
>                        </td>
>                </tr>
>                <tr>
>                        <td>
>                                <bean:message 
> key="studentRegistrationWizard.country"/>
>                        </td>
>                        <td>
>                                <bean:write name="adamh" property="country" />
>                        </td>
>                </tr>
>                <tr>
>                        <td>
>                                <bean:message key="studentRegistrationWizard.state"/>
>                        </td>
>                        <td>
>                                <bean:write name="adamh" property="state" />
>                        </td>
>                </tr>
>                <tr>
>                        <td>
>                                <bean:message key="studentRegistrationWizard.gender"/>
>                        </td>
>                        <td>
>                                <bean:write name="adamh" property="gender" />
>                        </td>
>                </tr>
>         <tr>
>             <td>
>                 Projects:
>             </td>
>         </tr>
> 
>         <nested:root name="adamh">
>             <nested:iterate id="element1" property="projects">
>                     <tr>
>                         <td>
>                             Name:
>                         </td>
>                         <td>
>                             <nested:write name="element1" property="name"/>
>                         </td>
>                     </tr>
>                     <tr>
>                         <td>
>                             Query:
>                         </td>
>                         <td>
>                             <nested:write name="element1"
> property="query"/>
>                         </td>
>                     </tr>
> 
>                     <nested:iterate name="element2" property="urls">
>                         <tr>
>                             <td>
>                                 <nested:write name="element2"
> property="url"/>
>                             </td>
>                         </tr>
>                     </nested:iterate>
> 
>                     <tr>
>                         <td colspan="2">
>                             <hr>
>                         </td>
>                     </tr>
>             </nested:iterate>
>         </nested:root>
> 
>        </table>
> </body>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
>

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

Reply via email to