Hi, I could not make the official version properly. I got the same problem as you. However, I took the nightly build of 20051130 and I was OK.
Bye, Dan -----Original Message----- From: Alex Burton [mailto:[EMAIL PROTECTED] Sent: mardi 17 janvier 2006 7:32 To: MyFaces Discussion Subject: Fwd: tree2 problem: Encountered a node [0] + with an illogical state hi there, Is there a way to properly flush the tree2 client and server side components? I seem to get the below exception very regularly. I have a drop down selection list that on change shows a different tree. after a few goes i seem to get this pretty often.... i also seem to start getting duplicates in the tree sometimes too... any ideas? cheers, Alex. javax.servlet.ServletException: Encountered a node [0] + with an illogical state. Node is expanded but it is also considered a leaf (a leaf cannot be considered expanded. javax.faces.webapp.FacesServlet.service(FacesServlet.java:121) org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(Extensi onsFilter.java:122) root cause java.lang.IllegalStateException: Encountered a node [0] + with an illogical state. Node is expanded but it is also considered a leaf (a leaf cannot be considered expanded. org.apache.myfaces.custom.tree2.HtmlTreeRenderer.encodeNavigation(HtmlTr eeRenderer.java:463) org.apache.myfaces.custom.tree2.HtmlTreeRenderer.encodeCurrentNode(HtmlT reeRenderer.java:346) org.apache.myfaces.custom.tree2.HtmlTreeRenderer.encodeTree(HtmlTreeRend erer.java:248) org.apache.myfaces.custom.tree2.HtmlTreeRenderer.encodeChildren(HtmlTree Renderer.java:196) javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.jav a:319) javax.faces.webapp.UIComponentTag.encodeChildren(UIComponentTag.java:343 ) javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:251) org.apache.jsp.structure_jsp._jspx_meth_t_tree2_0(structure_jsp.java:593 ) org.apache.jsp.structure_jsp._jspx_meth_h_form_0(structure_jsp.java:461) org.apache.jsp.structure_jsp._jspx_meth_f_view_0(structure_jsp.java:197) org.apache.jsp.structure_jsp._jspService(structure_jsp.java:147) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.ja va:324) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(S ervletExternalContextImpl.java:415) org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspView HandlerImpl.java:234) org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:352 ) javax.faces.webapp.FacesServlet.service(FacesServlet.java:107) org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(Extensi onsFilter.java:122) code: <t:tree2 value="#{siteBean.navTreeModel}" id="tree" var="node" varNodeToggler="t" clientSideToggle="false" preserveToggle="false"> <f:facet name="node"> <h:panelGroup> <t:graphicImage value="images/document.png" border="0" /> <h:outputText value="#{node.description}" /> <t:graphicImage value="images/spacer.gif" width="10" height="1" border="0" /> <t:popup styleClass="popup" closePopupOnExitingPopup="true"> <t:graphicImage value="images/edit.png" border="0" /> <f:facet name="popup"> <h:panelGroup> <h:panelGrid columns="1"> <h:outputText value="#{node.description}" /> <h:commandLink styleClass="document" action="structure_add"> <t:graphicImage value="images/document.png" border="0" /> <h:outputText value="Add new child page" /> <f:param name="structureForm:navItem.siteId" value="#{siteBean.siteSelectedItem}" /> <f:param name="structureForm:navItem.parentId" value="#{node.identifier}" /> </h:commandLink> </h:panelGrid> </h:panelGroup> </f:facet> </t:popup> </h:panelGroup> </f:facet> </t:tree2> <managed-bean> <managed-bean-name>siteBean</managed-bean-name> <managed-bean-class>com.zuffle.cms.view.bean.SiteBean</managed-bean-clas s> <managed-bean-scope>session</managed-bean-scope> </managed-bean> public class SiteBean extends BaseBean implements ValueChangeListener { private Logger log = Logger.getLogger(this.getClass()); private List sites; private List sitesSelectedItems = new ArrayList(); private String siteSelectedItem; private Site site; private TreeModelBase navTreeModel; /** * Set up the SiteBean with data. It is held in the session. */ public SiteBean() { // Get the sites this.sites = this.serviceLocator.getStructureService().listSites( new User()); if (this.sites != null && this.sites.size() > 0) { this.site = (Site) sites.get(0); changeSiteValues(); } } private void changeSiteValues() { // Select the first site (if there is one) if (this.sites != null && this.sites.size() > 0) { // Turn into selects for controls this.sitesSelectedItems = SelectItemHelper .getSelectItems(this.sites); this.siteSelectedItem = this.site.getId().toString(); if (this.site.getStructures() != null && this.site.getStructures().size() > 0) { Structure structure = (Structure) this.site.getStructures() .toArray()[0]; Set navItems = structure.getNavItems(); List listNavItems = new ArrayList(navItems); NavItem rootNavItem = null; try { rootNavItem = (NavItem) TreeHelper.collectionToTree( "getId", "getParentId", "getNavItems", "setNavItems", List.class, ArrayList.class, listNavItems); TreeNodeBase rootNode = new TreeNodeBase(); rootNode = walkTreeNode(rootNavItem, rootNode); this.navTreeModel = new TreeModelBase(rootNode); } catch (Exception e) { // TODO: add handling } } else { // default entries TreeNodeBase rootNode = new TreeNodeBase(); rootNode.setDescription("Missing home node"); rootNode.setIdentifier("0"); rootNode.setLeaf(true); rootNode.setType("node"); this.navTreeModel = new TreeModelBase(rootNode); } } } public Site getSite() { return site; } public void setSite(Site site) { this.site = site; } /** * The listener to change selected site */ public void processValueChange(javax.faces.event.ValueChangeEvent event) throws AbortProcessingException { log.debug("value change [" + event.getOldValue() + "] to [" + event.getNewValue() + "]"); // if (this.sites != null && this.sites.size() > 0) { for (int i = 0; i < this.sites.size(); i++) { if (((Site) sites.get(i)).getId().intValue() == Integer .parseInt((String) event.getNewValue())) { this.site = (Site) sites.get(i); changeSiteValues(); } } } } public TreeModelBase getNavTreeModel() throws Exception { return navTreeModel; } public void setNavTreeModel(TreeModelBase navTreeModel) { this.navTreeModel = navTreeModel; } /** * */ public TreeNodeBase walkTreeNode(NavItem navItem, TreeNodeBase navNode) { navNode.setDescription(navItem.getName() + "[" + navItem.getOrder() + "]"); navNode.setIdentifier(navItem.getId().toString()); if (navItem.getNavItems() != null && navItem.getNavItems().size() > 0) { navNode.setLeaf(false); } else { navNode.setLeaf(true); } navNode.setType("node"); // step into child nodes List childNavItems = navItem.getNavItems(); if (childNavItems != null) { Iterator iChildNavItems = childNavItems.iterator(); while (iChildNavItems.hasNext()) { NavItem childNavItem = (NavItem) iChildNavItems.next(); TreeNodeBase childNode = new TreeNodeBase(); childNode = walkTreeNode(childNavItem, childNode); navNode.getChildren().add(childNode); } } return navNode; } public List getSites() { return sites; } public void setSites(List sites) { this.sites = sites; } public String getSiteSelectedItem() { return siteSelectedItem; } public void setSiteSelectedItem(String siteSelectedItem) { this.siteSelectedItem = siteSelectedItem; } public List getSitesSelectedItems() { return sitesSelectedItems; } public void setSitesSelectedItems(List sitesSelectedItems) { this.sitesSelectedItems = sitesSelectedItems; } }

