You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Luther Baker <lu...@gmail.com> on 2009/03/26 17:50:49 UTC

nested loop view

I'm trying to create a page - similar to Jira's BROWSE PROJECTS.

My initial take amounts to a loop in a loop.

The outer loop is CATEGORIES and the inner loop is PROJECTS in said
category.

| CATEGORY 1
| p1
| p2
| p3

| CATEGORY 2
| p4
| p5
| p6

...

I've attached code below but if I removed the nested loop, I can easily loop
over just CATEGORIES but as soon as I add the nested loop, it fails with the
following

WicketMessage: Error attaching this container for rendering: [Page class =
com.fuzzybearings.milestones.web.page.user.ProjectsPage, id = 3, version =
0]

Root cause:

java.lang.IllegalArgumentException: A child with id 'projects' already
exists:
[MarkupContainer [Component id = categories]]


My intuition tells me that 'wicket:id="projects"' is repeating since it is
contained in an outer loop ... but I'm not sure how else to identify this
type of structure in a general way. Is there a loop container more suited to
this ... open to suggestions.

Thanks in advance,

-Luther



*.html snippet

        <div wicket:id="categories">
        <table>
            <tr wicket:id="projects">
                <td><a wicket:id="projectLink" href="#"><span
wicket:id="projectLabel">[project]</span></a></td>
            </tr>
        </table>
        </div>


*.java snippet

    public ProjectsPage(ResourceModel bodyTitle)
    {
        super(bodyTitle);

        ListView categories = new ListView("categories",
this.getCategories())
        {

            @Override
            protected void populateItem(ListItem item)
            {
                Category category = (Category) item.getModelObject();

                ListView projects = new ListView("projects",
ProjectsPage.this.getProjects(category))
                {

                    @Override
                    protected void populateItem(ListItem item)
                    {
                        Project project = (Project) item.getModelObject();
                        Link link = new Link("projectLink", item.getModel())
                        {

                            @Override
                            public void onClick() { ... }
                        };
                        link.add(new Label("projectLabel",
project.getName()));
                        item.add(link);
                    }
                };
                this.add(projects);
            }
        };
        this.add(categories);
    }

Re: nested loop view

Posted by Luther Baker <lu...@gmail.com>.
In my case, I was adding something to 'this' instead of the parent / outer
item:

I think the line

        *add(new ListView("reportItems", reportItems) {*

is implicitly

        *this.add(new ListView("reportItems", reportItems) {*

and likely not what you want ... try changing it to

        *listItem*.add(new ListView("reportItems", reportItems) {


or in context:

add(new ListView("reportList", reportVector) {
                       public void populateItem(final ListItem listItem) {
                               Vector<ReportItem> reportItems = ((ReportDAO)
listItem

 .getModelObject()).getReportItems();
*                              listItem.add(new ListView("reportItems",
reportItems) {*


If that doesn't work for you - post the stack trace and try to match up the
line numbers to the source you've posted and someone here might spot the
problem.

-Luther



On Thu, May 28, 2009 at 11:26 PM, khamis0o <mo...@hotmail.com>wrote:

>
> Can you please share the solution?
> I am doing something similar and I get java.lang.IllegalArgumentException:
> A
> child with id 'reoirtItems' already exists
>
>
> /*java*/
> add(new ListView("reportList", reportVector) {
>                        public void populateItem(final ListItem listItem) {
>                                Vector<ReportItem> reportItems =
> ((ReportDAO) listItem
>
>  .getModelObject()).getReportItems();
>                                add(new ListView("reportItems", reportItems)
> {
>                                        protected void populateItem(final
> ListItem reportItem) {
>
>                                                ReportItem item =
> (ReportItem) reportItem
>
>  .getModelObject();
>                                                int copyId =
> item.getCopyID();
>                                                String image =
> item.getItemImage();
>                                                String itemClass =
> item.getItemClass();
>                                                String itemSubClass =
> item.getItemSubClass();
>                                                String itemLocation =
> item.getItemLocation();
>                                                String actionDate =
> item.getActionDate();
>                                                String status =
> item.getState();
>                                                String userID =
> item.getUserID();
>
>                                                reportItem.add(new
> Label("image",
>                                                                (image ==
> null) ? "Unavailable" : image));
>                                                reportItem
>                                                                .add(new
> Label(
>
>    "itemClass",
>
>    (itemClass.equals("NA") || itemClass == null) ? "Unavailable"
>
>                    : itemClass));
>                                                reportItem.add(new
> Label("itemSubClass",
>
>  (itemSubClass == null) ? "Unavailable"
>
>    : itemSubClass));
>                                                reportItem.add(new
> Label("itemLocation",
>
>  (itemLocation == null) ? "Unavailable"
>
>    : itemLocation));
>                                                reportItem
>                                                                .add(new
> Label("actionDate",
>
>    actionDate == null ? "Unavailable"
>
>                    : actionDate));
>                                                reportItem.add(new
> Label("status",
>                                                                status ==
> null ? "Unavailable" : status));
>                                                reportItem.add(new
> Label("user",
>                                                                userID ==
> null ? "Unavailable" : userID));
>                                        }
>
>                                });
>
>                        }
>                });
> /*HTML*/
> <table wicket:id="reportList">
>        <table wicket:id="reportItems">
>                <tr>
>
>                        ---------------------------------------------
>
>                </tr>
>
>                <td wicket:id="image">[image path]</td>
>                <td>
>                <table>
>
>                        <tr>
>                                <td class="label">Title:</td>
>
>                                <td wicket:id="title">[Item's Title]</td>
>                        </tr>
>
>                        <tr>
>                                <td class="label">Class:</td>
>
>                                <td wicket:id="itemClass">[class]</td>
>                        </tr>
>
>                        <tr>
>
>                                <td class="label">Sub-Class:</td>
>
>                                <td wicket:id="itemSubClass">[subclass]</td>
>
>                        </tr>
>
>
>                        <tr>
>                                <td class="label">Location:</td>
>
>                                <td wicket:id="itemLocation">[location]</td>
>
>                        </tr>
>
>                        <tr>
>
>                                <td class="label">Date:</td>
>
>                                <td wicket:id="actionDate">[Action
> Date]</td>
>
>                        </tr>
>                        <tr>
>
>                                <td class="label">Status:</td>
>
>                                <td wicket:id="itemStatus">[item state]</td>
>
>                        </tr>
>                        <tr>
>
>                                <td class="label">User ID:</td>
>
>                                <td wicket:id="itemStatus">[user id]</td>
>
>                        </tr>
>
>
>                </table>
>                </td>
>        </table>
> </table>
>
>
> Sorry for posting my problem in your thread but i am a newbie here and i
> can't get to subscribe in the mailing list so I can't post any threads..
> Thanks for your understanding.. waiting for your reply.
>
>
> luther.baker wrote:
> >
> > Ahh ... but of course!
> >
> > Thanks both of you. The nested structure did indeed obscure the problem.
> >
> > Fixed and refactored a bit - and now working as expected.
> >
> > Thanks for your time!
> >
> > -Luther
> >
> >
> >
> > On Thu, Mar 26, 2009 at 12:01 PM, Jonathan Locke
> > <jo...@gmail.com>wrote:
> >
> >>
> >>
> >> uh, well maybe not dangerous, just less clear than it could be.
> >>
> >>
> >> Jonathan Locke wrote:
> >> >
> >> >
> >> > i think you mean to add the projects listview to the categories list
> >> view
> >> > /item/
> >> >
> >> > your structure is a little dangerous here because you have one
> ListItem
> >> > item
> >> > obscuring the other. if the outer one were called outerItem and the
> >> inner
> >> > one
> >> > were called innerItem, i think you meant to say
> outerItem.add(projects)
> >> > and
> >> > innerItem.add(link)
> >> >
> >> >
> >> > luther.baker wrote:
> >> >>
> >> >> I'm trying to create a page - similar to Jira's BROWSE PROJECTS.
> >> >>
> >> >> My initial take amounts to a loop in a loop.
> >> >>
> >> >> The outer loop is CATEGORIES and the inner loop is PROJECTS in said
> >> >> category.
> >> >>
> >> >> | CATEGORY 1
> >> >> | p1
> >> >> | p2
> >> >> | p3
> >> >>
> >> >> | CATEGORY 2
> >> >> | p4
> >> >> | p5
> >> >> | p6
> >> >>
> >> >> ...
> >> >>
> >> >> I've attached code below but if I removed the nested loop, I can
> >> easily
> >> >> loop
> >> >> over just CATEGORIES but as soon as I add the nested loop, it fails
> >> with
> >> >> the
> >> >> following
> >> >>
> >> >> WicketMessage: Error attaching this container for rendering: [Page
> >> class
> >> >> =
> >> >> com.fuzzybearings.milestones.web.page.user.ProjectsPage, id = 3,
> >> version
> >> >> =
> >> >> 0]
> >> >>
> >> >> Root cause:
> >> >>
> >> >> java.lang.IllegalArgumentException: A child with id 'projects'
> already
> >> >> exists:
> >> >> [MarkupContainer [Component id = categories]]
> >> >>
> >> >>
> >> >> My intuition tells me that 'wicket:id="projects"' is repeating since
> >> it
> >> >> is
> >> >> contained in an outer loop ... but I'm not sure how else to identify
> >> this
> >> >> type of structure in a general way. Is there a loop container more
> >> suited
> >> >> to
> >> >> this ... open to suggestions.
> >> >>
> >> >> Thanks in advance,
> >> >>
> >> >> -Luther
> >> >>
> >> >>
> >> >>
> >> >> *.html snippet
> >> >>
> >> >>         <div wicket:id="categories">
> >> >>         <table>
> >> >>             <tr wicket:id="projects">
> >> >>                 <td> # [project] </td>
> >> >>             </tr>
> >> >>         </table>
> >> >>         </div>
> >> >>
> >> >>
> >> >> *.java snippet
> >> >>
> >> >>     public ProjectsPage(ResourceModel bodyTitle)
> >> >>     {
> >> >>         super(bodyTitle);
> >> >>
> >> >>         ListView categories = new ListView("categories",
> >> >> this.getCategories())
> >> >>         {
> >> >>
> >> >>             @Override
> >> >>             protected void populateItem(ListItem item)
> >> >>             {
> >> >>                 Category category = (Category) item.getModelObject();
> >> >>
> >> >>                 ListView projects = new ListView("projects",
> >> >> ProjectsPage.this.getProjects(category))
> >> >>                 {
> >> >>
> >> >>                     @Override
> >> >>                     protected void populateItem(ListItem item)
> >> >>                     {
> >> >>                         Project project = (Project)
> >> >> item.getModelObject();
> >> >>                         Link link = new Link("projectLink",
> >> >> item.getModel())
> >> >>                         {
> >> >>
> >> >>                             @Override
> >> >>                             public void onClick() { ... }
> >> >>                         };
> >> >>                         link.add(new Label("projectLabel",
> >> >> project.getName()));
> >> >>                         item.add(link);
> >> >>                     }
> >> >>                 };
> >> >>                 this.add(projects);
> >> >>             }
> >> >>         };
> >> >>         this.add(categories);
> >> >>     }
> >> >>
> >> >>
> >> >
> >> >
> >>
> >> --
> >> View this message in context:
> >> http://www.nabble.com/nested-loop-view-tp22726252p22726482.html
> >> Sent from the Wicket - User mailing list archive at Nabble.com.
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> >> For additional commands, e-mail: users-help@wicket.apache.org
> >>
> >>
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/nested-loop-view-tp22726252p23774065.html
> Sent from the Wicket - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

Re: nested loop view

Posted by khamis0o <mo...@hotmail.com>.
Can you please share the solution? 
I am doing something similar and I get java.lang.IllegalArgumentException: A
child with id 'reoirtItems' already exists


/*java*/
add(new ListView("reportList", reportVector) {
			public void populateItem(final ListItem listItem) {
				Vector<ReportItem> reportItems = ((ReportDAO) listItem
						.getModelObject()).getReportItems();
				add(new ListView("reportItems", reportItems) {
					protected void populateItem(final ListItem reportItem) {

						ReportItem item = (ReportItem) reportItem
								.getModelObject();
						int copyId = item.getCopyID();
						String image = item.getItemImage();
						String itemClass = item.getItemClass();
						String itemSubClass = item.getItemSubClass();
						String itemLocation = item.getItemLocation();
						String actionDate = item.getActionDate();
						String status = item.getState();
						String userID = item.getUserID();

						reportItem.add(new Label("image",
								(image == null) ? "Unavailable" : image));
						reportItem
								.add(new Label(
										"itemClass",
										(itemClass.equals("NA") || itemClass == null) ? "Unavailable"
												: itemClass));
						reportItem.add(new Label("itemSubClass",
								(itemSubClass == null) ? "Unavailable"
										: itemSubClass));
						reportItem.add(new Label("itemLocation",
								(itemLocation == null) ? "Unavailable"
										: itemLocation));
						reportItem
								.add(new Label("actionDate",
										actionDate == null ? "Unavailable"
												: actionDate));
						reportItem.add(new Label("status",
								status == null ? "Unavailable" : status));
						reportItem.add(new Label("user",
								userID == null ? "Unavailable" : userID));
					}

				});

			}
		});
/*HTML*/
<table wicket:id="reportList">
	<table wicket:id="reportItems">
		<tr>

			---------------------------------------------

		</tr>

		<td wicket:id="image">[image path]</td>
		<td>
		<table>

			<tr>
				<td class="label">Title:</td>

				<td wicket:id="title">[Item's Title]</td>
			</tr>

			<tr>
				<td class="label">Class:</td>

				<td wicket:id="itemClass">[class]</td>
			</tr>

			<tr>

				<td class="label">Sub-Class:</td>

				<td wicket:id="itemSubClass">[subclass]</td>

			</tr>


			<tr>
				<td class="label">Location:</td>

				<td wicket:id="itemLocation">[location]</td>

			</tr>

			<tr>

				<td class="label">Date:</td>

				<td wicket:id="actionDate">[Action Date]</td>

			</tr>
			<tr>

				<td class="label">Status:</td>

				<td wicket:id="itemStatus">[item state]</td>

			</tr>
			<tr>

				<td class="label">User ID:</td>

				<td wicket:id="itemStatus">[user id]</td>

			</tr>


		</table>
		</td>
	</table>
</table>


Sorry for posting my problem in your thread but i am a newbie here and i
can't get to subscribe in the mailing list so I can't post any threads..
Thanks for your understanding.. waiting for your reply.


luther.baker wrote:
> 
> Ahh ... but of course!
> 
> Thanks both of you. The nested structure did indeed obscure the problem.
> 
> Fixed and refactored a bit - and now working as expected.
> 
> Thanks for your time!
> 
> -Luther
> 
> 
> 
> On Thu, Mar 26, 2009 at 12:01 PM, Jonathan Locke
> <jo...@gmail.com>wrote:
> 
>>
>>
>> uh, well maybe not dangerous, just less clear than it could be.
>>
>>
>> Jonathan Locke wrote:
>> >
>> >
>> > i think you mean to add the projects listview to the categories list
>> view
>> > /item/
>> >
>> > your structure is a little dangerous here because you have one ListItem
>> > item
>> > obscuring the other. if the outer one were called outerItem and the
>> inner
>> > one
>> > were called innerItem, i think you meant to say outerItem.add(projects)
>> > and
>> > innerItem.add(link)
>> >
>> >
>> > luther.baker wrote:
>> >>
>> >> I'm trying to create a page - similar to Jira's BROWSE PROJECTS.
>> >>
>> >> My initial take amounts to a loop in a loop.
>> >>
>> >> The outer loop is CATEGORIES and the inner loop is PROJECTS in said
>> >> category.
>> >>
>> >> | CATEGORY 1
>> >> | p1
>> >> | p2
>> >> | p3
>> >>
>> >> | CATEGORY 2
>> >> | p4
>> >> | p5
>> >> | p6
>> >>
>> >> ...
>> >>
>> >> I've attached code below but if I removed the nested loop, I can
>> easily
>> >> loop
>> >> over just CATEGORIES but as soon as I add the nested loop, it fails
>> with
>> >> the
>> >> following
>> >>
>> >> WicketMessage: Error attaching this container for rendering: [Page
>> class
>> >> =
>> >> com.fuzzybearings.milestones.web.page.user.ProjectsPage, id = 3,
>> version
>> >> =
>> >> 0]
>> >>
>> >> Root cause:
>> >>
>> >> java.lang.IllegalArgumentException: A child with id 'projects' already
>> >> exists:
>> >> [MarkupContainer [Component id = categories]]
>> >>
>> >>
>> >> My intuition tells me that 'wicket:id="projects"' is repeating since
>> it
>> >> is
>> >> contained in an outer loop ... but I'm not sure how else to identify
>> this
>> >> type of structure in a general way. Is there a loop container more
>> suited
>> >> to
>> >> this ... open to suggestions.
>> >>
>> >> Thanks in advance,
>> >>
>> >> -Luther
>> >>
>> >>
>> >>
>> >> *.html snippet
>> >>
>> >>         <div wicket:id="categories">
>> >>         <table>
>> >>             <tr wicket:id="projects">
>> >>                 <td> # [project] </td>
>> >>             </tr>
>> >>         </table>
>> >>         </div>
>> >>
>> >>
>> >> *.java snippet
>> >>
>> >>     public ProjectsPage(ResourceModel bodyTitle)
>> >>     {
>> >>         super(bodyTitle);
>> >>
>> >>         ListView categories = new ListView("categories",
>> >> this.getCategories())
>> >>         {
>> >>
>> >>             @Override
>> >>             protected void populateItem(ListItem item)
>> >>             {
>> >>                 Category category = (Category) item.getModelObject();
>> >>
>> >>                 ListView projects = new ListView("projects",
>> >> ProjectsPage.this.getProjects(category))
>> >>                 {
>> >>
>> >>                     @Override
>> >>                     protected void populateItem(ListItem item)
>> >>                     {
>> >>                         Project project = (Project)
>> >> item.getModelObject();
>> >>                         Link link = new Link("projectLink",
>> >> item.getModel())
>> >>                         {
>> >>
>> >>                             @Override
>> >>                             public void onClick() { ... }
>> >>                         };
>> >>                         link.add(new Label("projectLabel",
>> >> project.getName()));
>> >>                         item.add(link);
>> >>                     }
>> >>                 };
>> >>                 this.add(projects);
>> >>             }
>> >>         };
>> >>         this.add(categories);
>> >>     }
>> >>
>> >>
>> >
>> >
>>
>> --
>> View this message in context:
>> http://www.nabble.com/nested-loop-view-tp22726252p22726482.html
>> Sent from the Wicket - User mailing list archive at Nabble.com.
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>
> 
> 

-- 
View this message in context: http://www.nabble.com/nested-loop-view-tp22726252p23774065.html
Sent from the Wicket - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: nested loop view

Posted by Luther Baker <lu...@gmail.com>.
Ahh ... but of course!

Thanks both of you. The nested structure did indeed obscure the problem.

Fixed and refactored a bit - and now working as expected.

Thanks for your time!

-Luther



On Thu, Mar 26, 2009 at 12:01 PM, Jonathan Locke
<jo...@gmail.com>wrote:

>
>
> uh, well maybe not dangerous, just less clear than it could be.
>
>
> Jonathan Locke wrote:
> >
> >
> > i think you mean to add the projects listview to the categories list view
> > /item/
> >
> > your structure is a little dangerous here because you have one ListItem
> > item
> > obscuring the other. if the outer one were called outerItem and the inner
> > one
> > were called innerItem, i think you meant to say outerItem.add(projects)
> > and
> > innerItem.add(link)
> >
> >
> > luther.baker wrote:
> >>
> >> I'm trying to create a page - similar to Jira's BROWSE PROJECTS.
> >>
> >> My initial take amounts to a loop in a loop.
> >>
> >> The outer loop is CATEGORIES and the inner loop is PROJECTS in said
> >> category.
> >>
> >> | CATEGORY 1
> >> | p1
> >> | p2
> >> | p3
> >>
> >> | CATEGORY 2
> >> | p4
> >> | p5
> >> | p6
> >>
> >> ...
> >>
> >> I've attached code below but if I removed the nested loop, I can easily
> >> loop
> >> over just CATEGORIES but as soon as I add the nested loop, it fails with
> >> the
> >> following
> >>
> >> WicketMessage: Error attaching this container for rendering: [Page class
> >> =
> >> com.fuzzybearings.milestones.web.page.user.ProjectsPage, id = 3, version
> >> =
> >> 0]
> >>
> >> Root cause:
> >>
> >> java.lang.IllegalArgumentException: A child with id 'projects' already
> >> exists:
> >> [MarkupContainer [Component id = categories]]
> >>
> >>
> >> My intuition tells me that 'wicket:id="projects"' is repeating since it
> >> is
> >> contained in an outer loop ... but I'm not sure how else to identify
> this
> >> type of structure in a general way. Is there a loop container more
> suited
> >> to
> >> this ... open to suggestions.
> >>
> >> Thanks in advance,
> >>
> >> -Luther
> >>
> >>
> >>
> >> *.html snippet
> >>
> >>         <div wicket:id="categories">
> >>         <table>
> >>             <tr wicket:id="projects">
> >>                 <td> # [project] </td>
> >>             </tr>
> >>         </table>
> >>         </div>
> >>
> >>
> >> *.java snippet
> >>
> >>     public ProjectsPage(ResourceModel bodyTitle)
> >>     {
> >>         super(bodyTitle);
> >>
> >>         ListView categories = new ListView("categories",
> >> this.getCategories())
> >>         {
> >>
> >>             @Override
> >>             protected void populateItem(ListItem item)
> >>             {
> >>                 Category category = (Category) item.getModelObject();
> >>
> >>                 ListView projects = new ListView("projects",
> >> ProjectsPage.this.getProjects(category))
> >>                 {
> >>
> >>                     @Override
> >>                     protected void populateItem(ListItem item)
> >>                     {
> >>                         Project project = (Project)
> >> item.getModelObject();
> >>                         Link link = new Link("projectLink",
> >> item.getModel())
> >>                         {
> >>
> >>                             @Override
> >>                             public void onClick() { ... }
> >>                         };
> >>                         link.add(new Label("projectLabel",
> >> project.getName()));
> >>                         item.add(link);
> >>                     }
> >>                 };
> >>                 this.add(projects);
> >>             }
> >>         };
> >>         this.add(categories);
> >>     }
> >>
> >>
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/nested-loop-view-tp22726252p22726482.html
> Sent from the Wicket - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

Re: nested loop view

Posted by Jonathan Locke <jo...@gmail.com>.

uh, well maybe not dangerous, just less clear than it could be.


Jonathan Locke wrote:
> 
> 
> i think you mean to add the projects listview to the categories list view
> /item/
> 
> your structure is a little dangerous here because you have one ListItem
> item
> obscuring the other. if the outer one were called outerItem and the inner
> one 
> were called innerItem, i think you meant to say outerItem.add(projects)
> and 
> innerItem.add(link)
> 
> 
> luther.baker wrote:
>> 
>> I'm trying to create a page - similar to Jira's BROWSE PROJECTS.
>> 
>> My initial take amounts to a loop in a loop.
>> 
>> The outer loop is CATEGORIES and the inner loop is PROJECTS in said
>> category.
>> 
>> | CATEGORY 1
>> | p1
>> | p2
>> | p3
>> 
>> | CATEGORY 2
>> | p4
>> | p5
>> | p6
>> 
>> ...
>> 
>> I've attached code below but if I removed the nested loop, I can easily
>> loop
>> over just CATEGORIES but as soon as I add the nested loop, it fails with
>> the
>> following
>> 
>> WicketMessage: Error attaching this container for rendering: [Page class
>> =
>> com.fuzzybearings.milestones.web.page.user.ProjectsPage, id = 3, version
>> =
>> 0]
>> 
>> Root cause:
>> 
>> java.lang.IllegalArgumentException: A child with id 'projects' already
>> exists:
>> [MarkupContainer [Component id = categories]]
>> 
>> 
>> My intuition tells me that 'wicket:id="projects"' is repeating since it
>> is
>> contained in an outer loop ... but I'm not sure how else to identify this
>> type of structure in a general way. Is there a loop container more suited
>> to
>> this ... open to suggestions.
>> 
>> Thanks in advance,
>> 
>> -Luther
>> 
>> 
>> 
>> *.html snippet
>> 
>>         <div wicket:id="categories">
>>         <table>
>>             <tr wicket:id="projects">
>>                 <td> # [project] </td>
>>             </tr>
>>         </table>
>>         </div>
>> 
>> 
>> *.java snippet
>> 
>>     public ProjectsPage(ResourceModel bodyTitle)
>>     {
>>         super(bodyTitle);
>> 
>>         ListView categories = new ListView("categories",
>> this.getCategories())
>>         {
>> 
>>             @Override
>>             protected void populateItem(ListItem item)
>>             {
>>                 Category category = (Category) item.getModelObject();
>> 
>>                 ListView projects = new ListView("projects",
>> ProjectsPage.this.getProjects(category))
>>                 {
>> 
>>                     @Override
>>                     protected void populateItem(ListItem item)
>>                     {
>>                         Project project = (Project)
>> item.getModelObject();
>>                         Link link = new Link("projectLink",
>> item.getModel())
>>                         {
>> 
>>                             @Override
>>                             public void onClick() { ... }
>>                         };
>>                         link.add(new Label("projectLabel",
>> project.getName()));
>>                         item.add(link);
>>                     }
>>                 };
>>                 this.add(projects);
>>             }
>>         };
>>         this.add(categories);
>>     }
>> 
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/nested-loop-view-tp22726252p22726482.html
Sent from the Wicket - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: nested loop view

Posted by Jonathan Locke <jo...@gmail.com>.

i think you mean to add the projects listview to the categories list view
/item/

your structure is a little dangerous here because you have one ListItem item
obscuring the other. if the outer one were called outerItem and the inner
one 
were called innerItem, i think you meant to say outerItem.add(projects) and 
innerItem.add(link)


luther.baker wrote:
> 
> I'm trying to create a page - similar to Jira's BROWSE PROJECTS.
> 
> My initial take amounts to a loop in a loop.
> 
> The outer loop is CATEGORIES and the inner loop is PROJECTS in said
> category.
> 
> | CATEGORY 1
> | p1
> | p2
> | p3
> 
> | CATEGORY 2
> | p4
> | p5
> | p6
> 
> ...
> 
> I've attached code below but if I removed the nested loop, I can easily
> loop
> over just CATEGORIES but as soon as I add the nested loop, it fails with
> the
> following
> 
> WicketMessage: Error attaching this container for rendering: [Page class =
> com.fuzzybearings.milestones.web.page.user.ProjectsPage, id = 3, version =
> 0]
> 
> Root cause:
> 
> java.lang.IllegalArgumentException: A child with id 'projects' already
> exists:
> [MarkupContainer [Component id = categories]]
> 
> 
> My intuition tells me that 'wicket:id="projects"' is repeating since it is
> contained in an outer loop ... but I'm not sure how else to identify this
> type of structure in a general way. Is there a loop container more suited
> to
> this ... open to suggestions.
> 
> Thanks in advance,
> 
> -Luther
> 
> 
> 
> *.html snippet
> 
>         <div wicket:id="categories">
>         <table>
>             <tr wicket:id="projects">
>                 <td> # [project] </td>
>             </tr>
>         </table>
>         </div>
> 
> 
> *.java snippet
> 
>     public ProjectsPage(ResourceModel bodyTitle)
>     {
>         super(bodyTitle);
> 
>         ListView categories = new ListView("categories",
> this.getCategories())
>         {
> 
>             @Override
>             protected void populateItem(ListItem item)
>             {
>                 Category category = (Category) item.getModelObject();
> 
>                 ListView projects = new ListView("projects",
> ProjectsPage.this.getProjects(category))
>                 {
> 
>                     @Override
>                     protected void populateItem(ListItem item)
>                     {
>                         Project project = (Project) item.getModelObject();
>                         Link link = new Link("projectLink",
> item.getModel())
>                         {
> 
>                             @Override
>                             public void onClick() { ... }
>                         };
>                         link.add(new Label("projectLabel",
> project.getName()));
>                         item.add(link);
>                     }
>                 };
>                 this.add(projects);
>             }
>         };
>         this.add(categories);
>     }
> 
> 

-- 
View this message in context: http://www.nabble.com/nested-loop-view-tp22726252p22726455.html
Sent from the Wicket - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: nested loop view

Posted by Olivier Michallat <om...@gmail.com>.
I think you have to add "projects" to the current category item, not
to "this" (which would refer to the categories listview itself).

So try replacing:
   this.add(projects);
By:
   item.add(projects);

2009/3/26 Luther Baker <lu...@gmail.com>:
> I'm trying to create a page - similar to Jira's BROWSE PROJECTS.
>
> My initial take amounts to a loop in a loop.
>
> The outer loop is CATEGORIES and the inner loop is PROJECTS in said
> category.
>
> | CATEGORY 1
> | p1
> | p2
> | p3
>
> | CATEGORY 2
> | p4
> | p5
> | p6
>
> ...
>
> I've attached code below but if I removed the nested loop, I can easily loop
> over just CATEGORIES but as soon as I add the nested loop, it fails with the
> following
>
> WicketMessage: Error attaching this container for rendering: [Page class =
> com.fuzzybearings.milestones.web.page.user.ProjectsPage, id = 3, version =
> 0]
>
> Root cause:
>
> java.lang.IllegalArgumentException: A child with id 'projects' already
> exists:
> [MarkupContainer [Component id = categories]]
>
>
> My intuition tells me that 'wicket:id="projects"' is repeating since it is
> contained in an outer loop ... but I'm not sure how else to identify this
> type of structure in a general way. Is there a loop container more suited to
> this ... open to suggestions.
>
> Thanks in advance,
>
> -Luther
>
>
>
> *.html snippet
>
>        <div wicket:id="categories">
>        <table>
>            <tr wicket:id="projects">
>                <td><a wicket:id="projectLink" href="#"><span
> wicket:id="projectLabel">[project]</span></a></td>
>            </tr>
>        </table>
>        </div>
>
>
> *.java snippet
>
>    public ProjectsPage(ResourceModel bodyTitle)
>    {
>        super(bodyTitle);
>
>        ListView categories = new ListView("categories",
> this.getCategories())
>        {
>
>            @Override
>            protected void populateItem(ListItem item)
>            {
>                Category category = (Category) item.getModelObject();
>
>                ListView projects = new ListView("projects",
> ProjectsPage.this.getProjects(category))
>                {
>
>                    @Override
>                    protected void populateItem(ListItem item)
>                    {
>                        Project project = (Project) item.getModelObject();
>                        Link link = new Link("projectLink", item.getModel())
>                        {
>
>                            @Override
>                            public void onClick() { ... }
>                        };
>                        link.add(new Label("projectLabel",
> project.getName()));
>                        item.add(link);
>                    }
>                };
>                this.add(projects);
>            }
>        };
>        this.add(categories);
>    }
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: nested loop view

Posted by Brill Pappin <br...@pappin.ca>.
User error :)


review what element your adding the inner list to... looks like your  
adding it to the ListView instead of the Item.
Change:
	this.add(projects);
to
	item.add(projects);

- Brill Pappin


On 26-Mar-09, at 12:50 PM, Luther Baker wrote:

> I'm trying to create a page - similar to Jira's BROWSE PROJECTS.
>
> My initial take amounts to a loop in a loop.
>
> The outer loop is CATEGORIES and the inner loop is PROJECTS in said
> category.
>
> | CATEGORY 1
> | p1
> | p2
> | p3
>
> | CATEGORY 2
> | p4
> | p5
> | p6
>
> ...
>
> I've attached code below but if I removed the nested loop, I can  
> easily loop
> over just CATEGORIES but as soon as I add the nested loop, it fails  
> with the
> following
>
> WicketMessage: Error attaching this container for rendering: [Page  
> class =
> com.fuzzybearings.milestones.web.page.user.ProjectsPage, id = 3,  
> version =
> 0]
>
> Root cause:
>
> java.lang.IllegalArgumentException: A child with id 'projects' already
> exists:
> [MarkupContainer [Component id = categories]]
>
>
> My intuition tells me that 'wicket:id="projects"' is repeating since  
> it is
> contained in an outer loop ... but I'm not sure how else to identify  
> this
> type of structure in a general way. Is there a loop container more  
> suited to
> this ... open to suggestions.
>
> Thanks in advance,
>
> -Luther
>
>
>
> *.html snippet
>
>        <div wicket:id="categories">
>        <table>
>            <tr wicket:id="projects">
>                <td><a wicket:id="projectLink" href="#"><span
> wicket:id="projectLabel">[project]</span></a></td>
>            </tr>
>        </table>
>        </div>
>
>
> *.java snippet
>
>    public ProjectsPage(ResourceModel bodyTitle)
>    {
>        super(bodyTitle);
>
>        ListView categories = new ListView("categories",
> this.getCategories())
>        {
>
>            @Override
>            protected void populateItem(ListItem item)
>            {
>                Category category = (Category) item.getModelObject();
>
>                ListView projects = new ListView("projects",
> ProjectsPage.this.getProjects(category))
>                {
>
>                    @Override
>                    protected void populateItem(ListItem item)
>                    {
>                        Project project = (Project)  
> item.getModelObject();
>                        Link link = new Link("projectLink",  
> item.getModel())
>                        {
>
>                            @Override
>                            public void onClick() { ... }
>                        };
>                        link.add(new Label("projectLabel",
> project.getName()));
>                        item.add(link);
>                    }
>                };
>                this.add(projects);
>            }
>        };
>        this.add(categories);
>    }


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org