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 <[email protected]>:
> 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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to