部分代码如下:
 public TreeNode getPermissionByUserid(String userid)//生成树的节点
   {
   
     TreeNode trees=new TreeNodeBase();
   List modules=this.getModulenameByUserid(userid);
  if(modules!=null)
  {
  for(int i=0;i<modules.size();i++)
  {
  String treename=(String)modules.get(i);
  
  TreeNodeBase node = new TreeNodeBase("a",treename,"aaaa",false);
  
  //List treeChildren=tree.getChildren();
  List sections=this.getSectionByModuleAndUserid(treename, userid);
 if(sections!=null)
 {
  for(int j=0;j<sections.size();j++)
  {
  String sectionname=(String)sections.get(j);
  TreeNodeBase treenode=new TreeNodeBase("b",sectionname,true);
  treenode.setLeaf(true);
  treenode.setIdentifier(sectionname);
  node.getChildren().add(treenode);
  
  //treeChildren.add(treenode);
  }
     }trees.getChildren().add(node) ;}
      
  }
  return trees;
   }public TreeNode getTrees()//调用上面的方法
   {
   FacesContext context=FacesContext.getCurrentInstance();
   HttpSession session = (HttpSession)context.getExternalContext().getSession(true);
Userinfo user=(Userinfo)session.getAttribute("user");
   return this.getPermissionByUserid(String.valueOf(user.getUserid()));
   }public TreeModel getTreeModel()//生成一个TreeModel供JSP调用
{
ApplicationContext ac=new
ClassPathXmlApplicationContext("applicationContext.xml");
UserService us=(UserService)ac.getBean("userService");
TreeNode tree=us.getTrees();
treeModel=new TreeModelBase(tree);

treeModel.setTreeState(treeState);
return treeModel;
}jsp页面代码:
<t:tree2 id="clientTree" value="#{leftMenu.treeModel}" var="node" varNodeToggler="t" 
         showNav="true"
         showRootNode="false" >
<f:facet name="a">
  <h:panelGroup>  
    <h:outputText value="#{node.description}" styleClass="root" />
  </h:panelGroup>  
</f:facet>
<f:facet name="b">
    <h:commandLink actionListener="#{leftMenu.processAction}" value="#{node.description}" id="clickbutton" >
      <f:param id="nodeid" name="nodeid" value="#{node.identifier}"></f:param>
    </h:commandLink>
</f:facet>
</t:tree2>点击叶子结点时报错如下:
javax.servlet.ServletException: Unable to locate facet with the name: null
javax.faces.webapp.FacesServlet.service(FacesServlet.java:209)
org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:92)
org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:122)
root cause java.lang.IllegalArgumentException: Unable to locate facet with the name: null
org.apache.myfaces.custom.tree2.UITreeData.processNodes(UITreeData.java:484)
org.apache.myfaces.custom.tree2.UITreeData.processDecodes(UITreeData.java:161)
javax.faces.component.UIForm.processDecodes(UIForm.java:144)
javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:872)
javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:306)
com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:79)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:92)
org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:122)单步运行时发现点击叶子节点时它还是调用getTree()方法,又生成一次树,搞不懂,为什么会不执行里面的action方法那,是不是生成tree的时候哪个地方设错了?请高手指点,谢谢!!

解决方案 »

  1.   

    String sectionname=(String)sections.get(j);
    TreeNodeBase treenode=new TreeNodeBase("b",sectionname,true);
    treenode.setLeaf(true);
    treenode.setIdentifier(sectionname);
    node.getChildren().add(treenode);//treeChildren.add(treenode);
    }
    }trees.getChildren().add(node) ;}这段代码好像看不出你给节点设置了什么action
      

  2.   

    我想你可能还要这样设置一下:
       treenode.setUrl(你所要指定的action);这是我以前用过的树标签,和你的不完全一样,但我看差不多。
      

  3.   

    给节点设置action好像时在页面时设置吧,我页面显示的时候用的是commankLink ,不知道这样行不行呢,第一次接触这个东西,我是菜鸟请多多指教!!
      

  4.   

    treenode.setUrl(你所要指定的action);看看有没有类似的方法。
      

  5.   

    不知道谁对myfaces的tree2组件用的挺熟练的能告诉我这个组件的具体用法吗,能给出相关的代码参考最好了,谢谢!!
      

  6.   

    编程动力 www.bcexe.com 专业的编程开发类网站,网络编程,软件开发,网站开发,一切尽在这里!
      

  7.   

    不好意思,打错了。
    请问gxh19841007 你的树有没有搞定,我这两天要完成一个jsf的树。从数据库中读组织列表,根据根组织,一级一级的遍历下面的组织。谢谢了