eclipse-ee4j / mojarra

Mojarra, a Jakarta Faces implementation
Other
160 stars 109 forks source link

2.3.18: Server side generated UITreeNode lost after updating Tree (Primefaces) #5148

Closed brivalin closed 1 year ago

brivalin commented 2 years ago

Describe the bug

After generating a Tree component server side, with its UITreeNode childrens. The tree is well-generated. But when I update the Tree bound in @RequestScoped bean, it loses UITreeNode childrens previously created for Tree.

Original Report : https://github.com/primefaces/primefaces/issues/8916

To Reproduce

Reproducer: pf-8916.zip

Steps to reproduce the behavior:

  1. Run mvn clean jetty:run -Pmojarra23
  2. Navigate to http://127.0.0.1:8080/primefaces-test/text.xhtml
  3. Click on "Update" button
  4. See log error and tree nodes disappears

GRAVE: Error Rendering View[/test.xhtml] javax.faces.FacesException: Unsupported tree node type:type1 at org.primefaces.component.tree.Tree.getUITreeNodeByType(Tree.java:123) at org.primefaces.component.tree.TreeRenderer.encodeTreeNode(TreeRenderer.java:672) at org.primefaces.component.tree.TreeRenderer.encodeTreeNodeChildren(TreeRenderer.java:817) at org.primefaces.component.tree.TreeRenderer.encodeVerticalTree(TreeRenderer.java:412) at org.primefaces.component.tree.TreeRenderer.encodeMarkup(TreeRenderer.java:353) at org.primefaces.component.tree.TreeRenderer.encodeEnd(TreeRenderer.java:264) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:600) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1655) at javax.faces.render.Renderer.encodeChildren(Renderer.java:152) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:571) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1648) at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:628) at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:159) at javax.faces.component.UIForm.visitTree(UIForm.java:366) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1469) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1469) at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:413) at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:321) at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:65) at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:1102) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1648) at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:442) at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:170) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:132) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:132) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:102) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:76) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:199) at javax.faces.webapp.FacesServlet.executeLifecyle(FacesServlet.java:708) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:451) at org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1450) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656) at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:292) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191) at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.Server.handle(Server.java:516) at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) at java.base/java.lang.Thread.run(Thread.java:834)

Expected behavior

Mojarra doesn't loose UITreeNode childrens when updating Tree. (Like MyFaces)

Desktop

Additional context

It fails with Mojarra 2.2.20 and 2.3.18 but works with MyFaces 2.2.15 and 2.3.10.

mvn clean jetty:run -Pmojarra22 (fails)

mvn clean jetty:run -Pmojarra23 (fails)

mvn clean jetty:run -Pmyfaces22 (passes)

mvn clean jetty:run -Pmyfaces23 (passes)

mnriem commented 1 year ago

For Mojarra 2.3 and earlier please contact your vendor for support (RedHat, IBM, Oracle, Omnifish, Payara, etceteras)

melloware commented 1 year ago

@brivalin if we can verify it is still an issue on 4.0.3 lets open a new ticket.

brivalin commented 1 year ago

@brivalin if we can verify it is still an issue on 4.0.3 lets open a new ticket.

I'm currently in holiday but I will check it as son as possible when I get back to work.