[ https://issues.apache.org/jira/browse/WICKET-1226?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Doug Leeper closed WICKET-1226. ------------------------------- Resolution: Fixed Yes the fix worked for me. Thanks! > Deleting a treenode results in NPE > ---------------------------------- > > Key: WICKET-1226 > URL: https://issues.apache.org/jira/browse/WICKET-1226 > Project: Wicket > Issue Type: Bug > Components: wicket > Affects Versions: 1.3.0-rc1 > Reporter: Doug Leeper > Assignee: Matej Knopp > Fix For: 1.3.1 > > > I have a LinkTree with the root node visible. When deleting the last child > tree node from the root, I get a NullPointerException. > java.lang.NullPointerException > at > org.apache.wicket.markup.html.tree.BaseTree.isNodeLast(BaseTree.java:167) > at > org.apache.wicket.markup.html.tree.BaseTree.access$000(BaseTree.java:49) > at > org.apache.wicket.markup.html.tree.BaseTree$JunctionBorder.renderBefore(BaseTree.java:215) > at org.apache.wicket.Component.render(Component.java:2254) > at > org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1240) > at > org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1407) > at > org.apache.wicket.MarkupContainer.onComponentTagBody(MarkupContainer.java:1344) > at org.apache.wicket.Component.renderComponent(Component.java:2419) > at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1354) > at > org.apache.wicket.markup.html.tree.AbstractTree$TreeItem.onRender(AbstractTree.java:203) > at org.apache.wicket.Component.render(Component.java:2256) > at > org.apache.wicket.markup.html.tree.AbstractTree$TreeItemContainer$1.visitItem(AbstractTree.java:383) > at > org.apache.wicket.markup.html.tree.AbstractTree.visitItemAndChildren(AbstractTree.java:1430) > at > org.apache.wicket.markup.html.tree.AbstractTree.visitItemChildren(AbstractTree.java:1449) > at > org.apache.wicket.markup.html.tree.AbstractTree.visitItemAndChildren(AbstractTree.java:1431) > at > org.apache.wicket.markup.html.tree.AbstractTree.visitItemChildren(AbstractTree.java:1449) > at > org.apache.wicket.markup.html.tree.AbstractTree.visitItemAndChildren(AbstractTree.java:1431) > at > org.apache.wicket.markup.html.tree.AbstractTree.access$4(AbstractTree.java:1428) > at > org.apache.wicket.markup.html.tree.AbstractTree$TreeItemContainer.onRender(AbstractTree.java:390) > at org.apache.wicket.Component.render(Component.java:2256) > at > org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1240) > at > org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1407) > at > org.apache.wicket.MarkupContainer.renderAssociatedMarkup(MarkupContainer.java:631) > at > org.apache.wicket.markup.html.panel.Panel.onComponentTagBody(Panel.java:112) > at org.apache.wicket.Component.renderComponent(Component.java:2419) > at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1354) > at org.apache.wicket.Component.render(Component.java:2256) > at org.apache.wicket.Component.renderComponent(Component.java:2359) > at > org.apache.wicket.ajax.AjaxRequestTarget.respondComponent(AjaxRequestTarget.java:702) > at > org.apache.wicket.ajax.AjaxRequestTarget.respondComponents(AjaxRequestTarget.java:604) > at > org.apache.wicket.ajax.AjaxRequestTarget.respond(AjaxRequestTarget.java:519) > at > org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:103) > at > org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1100) > at org.apache.wicket.RequestCycle.step(RequestCycle.java:1169) > at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1248) > at org.apache.wicket.RequestCycle.request(RequestCycle.java:489) > at > org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:354) > at > org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:194) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) > at homeiq.hib.web.HibernateFilter.doFilter(HibernateFilter.java:68) > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) > at > org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) > at > org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) > at > org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) > at > org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712) > at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) > at > org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) > at org.mortbay.jetty.Server.handle(Server.java:313) > at > org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506) > at > org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:830) > at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514) > at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) > at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381) > at > org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396) > at > org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442) > A possible fix is the following: > In BaseTree.java: > public void renderBefore(Component component) > { > Response response = RequestCycle.get().getResponse(); > TreeNode parent = node.getParent(); > CharSequence classes[] = new CharSequence[level]; > for (int i = 0; i < level; ++i) > { > // FIX > //if (isNodeLast(parent)) > if ( parent == null || isNodeLast(parent) ) { > { > classes[i] = "spacer"; > } > else > { > classes[i] = "line"; > } > parent = parent.getParent(); > } > for (int i = level - 1; i >= 0; --i) > { > response.write("<td class=\"" + classes[i] + > "\"><span></span></td>"); > } > if (isNodeLast(node)) > { > response.write("<td class=\"half-line\">"); > } > else > { > response.write("<td class=\"line\">"); > } > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.