AW: LinkTree
Hi, i did another way an that way worked. Replace markupContainer.add(new Label(DETAILS_PANEL_ID,label).setOutputMarkupId(true)); with private final Label labelToReplace = new Label(DETAILS_PANEL_ID,label).setOutputMarkupId(true); markupContainer.add(labelToReplace); ... And in onNodeLinkClicked create your panel and then do: labelToReplace.replaceWith(targetPanel); Hope this helps. -Ursprüngliche Nachricht- Von: jahid [mailto:ja...@outscore.se] Gesendet: Mittwoch, 4. November 2009 15:13 An: users@wicket.apache.org Betreff: Re: LinkTree Guys, thanks a lot for quick reply. I have changed my code according to your mentioned way, but seems like i am doing something wrong. Below are my code, markup and stacktrace - 1. private WebMarkupContainer markupContainer; 2. final String DETAILS_PANEL_ID =detailsPanel; 3. public ListContractsPage() { 4. markupContainer =new WebMarkupContainer(markupContainer); 5. markupContainer.setOutputMarkupId(true); 6. markupContainer.add(new Label(DETAILS_PANEL_ID,label).setOutputMarkupId(true)); 7. add(prepareTree()); 8. add(markupContainer); 9. } 10. private BaseTree prepareTree() { 11. DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(Contracts); 12. TreeModel treeModel = new DefaultTreeModel(rootNode); 13. assembleContracts(rootNode); 14. final LinkTree linkTree=new LinkTree(tree, treeModel){ 15. @Override 16. protected void onNodeLinkClicked(Object node, BaseTree tree, AjaxRequestTarget target) { 17. //markupContainer.remove(DETAILS_PANEL_ID); 18. Object userObject = ((DefaultMutableTreeNode) node).getUserObject(); 19. Panel targetPanel; 20. if (userObject instanceof ServiceHandle) { 21. targetPanel = new ServiceDetailsPanelServiceHandle(DETAILS_PANEL_ID, (ServiceHandle) userObject); 22. } else if (userObject instanceof ContractHandle) { 23. targetPanel = new ContractDetailsPanelContractHandle(DETAILS_PANEL_ID, (ContractHandle) userObject); 24. } else { 25. throw new AssertionError(Expected: master, sub or service handle, but found: + userObject.getClass().getSimpleName()); 26. } 27. targetPanel.setOutputMarkupId(true); 28. ListContractsPage.this.addOrReplace(targetPanel); 29. target.addComponent(targetPanel); 30. } 31. }; 32. linkTree.setOutputMarkupId(true); 33. linkTree.getTreeState().expandNode(rootNode); 34. return linkTree; 35. } 1. !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN 2. http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd; 3. html xmlns=http://www.w3.org/1999/xhtml; 4. xmlns:wicket=http://wicket.apache.org/; xml:lang=en lang=en 5. body 6. wicket:extend 7. h4Contracts:/h4 8. table 9. tr 10. td 11. span wicket:id=tree[tree will be here]/span 12. /td 13. /tr 14. tr 15. td 16. span wicket:id=markupContainer 17. span wicket:id=detailsPanel/span 18. /span 19. /td 20. /tr 21. /table 22. /wicket:extend 23. /body 24. /html WicketMessage: Unable to find the markup for the component. That may be due to transparent containers or components implementing IComponentResolver: [MarkupContainer [Component id = detailsPanel]] Root cause: org.apache.wicket.WicketRuntimeException: Unable to find the markup for the component. That may be due to transparent containers or components implementing IComponentResolver: [MarkupContainer [Component id = detailsPanel]] at org.apache.wicket.MarkupFragmentFinder.find(MarkupFragmentFinder.java:125) at org.apache.wicket.Component.locateMarkupStream(Component.java:3820) at org.apache.wicket.Component.renderComponent(Component.java:2557) at org.apache.wicket.ajax.AjaxRequestTarget.respondComponent(AjaxRequestTarget.java:793) at org.apache.wicket.ajax.AjaxRequestTarget.respondComponents(AjaxRequestTarget.java:667) at org.apache.wicket.ajax.AjaxRequestTarget.respond(AjaxRequestTarget.java:579) at org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:105) at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1249) at org.apache.wicket.RequestCycle.step(RequestCycle.java:1320) at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1419) at org.apache.wicket.RequestCycle.request(RequestCycle.java:545) at
Re: AW: LinkTree
Ohh my bad, i was trying to replace the targetPanel to the page, not to the markupContainer. Now its working! :) Thanks guys! //Jahid Giambalvo, Christian wrote: Hi, i did another way an that way worked. Replace markupContainer.add(new Label(DETAILS_PANEL_ID,label).setOutputMarkupId(true)); with private final Label labelToReplace = new Label(DETAILS_PANEL_ID,label).setOutputMarkupId(true); markupContainer.add(labelToReplace); ... And in onNodeLinkClicked create your panel and then do: labelToReplace.replaceWith(targetPanel); Hope this helps. -Ursprüngliche Nachricht- Von: jahid [mailto:ja...@outscore.se] Gesendet: Mittwoch, 4. November 2009 15:13 An: users@wicket.apache.org Betreff: Re: LinkTree Guys, thanks a lot for quick reply. I have changed my code according to your mentioned way, but seems like i am doing something wrong. Below are my code, markup and stacktrace - 1. private WebMarkupContainer markupContainer; 2. final String DETAILS_PANEL_ID =detailsPanel; 3. public ListContractsPage() { 4. markupContainer =new WebMarkupContainer(markupContainer); 5. markupContainer.setOutputMarkupId(true); 6. markupContainer.add(new Label(DETAILS_PANEL_ID,label).setOutputMarkupId(true)); 7. add(prepareTree()); 8. add(markupContainer); 9. } 10. private BaseTree prepareTree() { 11. DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(Contracts); 12. TreeModel treeModel = new DefaultTreeModel(rootNode); 13. assembleContracts(rootNode); 14. final LinkTree linkTree=new LinkTree(tree, treeModel){ 15. @Override 16. protected void onNodeLinkClicked(Object node, BaseTree tree, AjaxRequestTarget target) { 17. //markupContainer.remove(DETAILS_PANEL_ID); 18. Object userObject = ((DefaultMutableTreeNode) node).getUserObject(); 19. Panel targetPanel; 20. if (userObject instanceof ServiceHandle) { 21. targetPanel = new ServiceDetailsPanelServiceHandle(DETAILS_PANEL_ID, (ServiceHandle) userObject); 22. } else if (userObject instanceof ContractHandle) { 23. targetPanel = new ContractDetailsPanelContractHandle(DETAILS_PANEL_ID, (ContractHandle) userObject); 24. } else { 25. throw new AssertionError(Expected: master, sub or service handle, but found: + userObject.getClass().getSimpleName()); 26. } 27. targetPanel.setOutputMarkupId(true); 28. ListContractsPage.this.addOrReplace(targetPanel); 29. target.addComponent(targetPanel); 30. } 31. }; 32. linkTree.setOutputMarkupId(true); 33. linkTree.getTreeState().expandNode(rootNode); 34. return linkTree; 35. } 1. !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN 2. http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd; 3. html xmlns=http://www.w3.org/1999/xhtml; 4. xmlns:wicket=http://wicket.apache.org/; xml:lang=en lang=en 5. body 6. wicket:extend 7. h4Contracts:/h4 8. table 9. tr 10. td 11. span wicket:id=tree[tree will be here]/span 12. /td 13. /tr 14. tr 15. td 16. span wicket:id=markupContainer 17. span wicket:id=detailsPanel/span 18. /span 19. /td 20. /tr 21. /table 22. /wicket:extend 23. /body 24. /html WicketMessage: Unable to find the markup for the component. That may be due to transparent containers or components implementing IComponentResolver: [MarkupContainer [Component id = detailsPanel]] Root cause: org.apache.wicket.WicketRuntimeException: Unable to find the markup for the component. That may be due to transparent containers or components implementing IComponentResolver: [MarkupContainer [Component id = detailsPanel]] at org.apache.wicket.MarkupFragmentFinder.find(MarkupFragmentFinder.java:125) at org.apache.wicket.Component.locateMarkupStream(Component.java:3820) at org.apache.wicket.Component.renderComponent(Component.java:2557) at org.apache.wicket.ajax.AjaxRequestTarget.respondComponent(AjaxRequestTarget.java:793) at org.apache.wicket.ajax.AjaxRequestTarget.respondComponents(AjaxRequestTarget.java:667) at org.apache.wicket.ajax.AjaxRequestTarget.respond(AjaxRequestTarget.java:579) at org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:105) at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1249) at