You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by Alex Burton <gr...@gmail.com> on 2006/01/17 07:32:08 UTC
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(ExtensionsFilter.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(HtmlTreeRenderer.java:463)
org.apache.myfaces.custom.tree2.HtmlTreeRenderer.encodeCurrentNode(HtmlTreeRenderer.java:346)
org.apache.myfaces.custom.tree2.HtmlTreeRenderer.encodeTree(HtmlTreeRenderer.java:248)
org.apache.myfaces.custom.tree2.HtmlTreeRenderer.encodeChildren(HtmlTreeRenderer.java:196)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java: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.java: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(ServletExternalContextImpl.java:415)
org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.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(ExtensionsFilter.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-class>
<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;
}
}