首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

myfaces的tree2组件生成树形菜单后,为什么子菜单的超链接会没反应?该如何解决

2012-01-07 
myfaces的tree2组件生成树形菜单后,为什么子菜单的超链接会没反应?部分代码如下:publicTreeNodegetPermiss

myfaces的tree2组件生成树形菜单后,为什么子菜单的超链接会没反应?
部分代码如下:
  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的时候哪个地方设错了?

请高手指点,谢谢!!

[解决办法]
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
[解决办法]
编程动力 www.bcexe.com 专业的编程开发类网站,网络编程,软件开发,网站开发,一切尽在这里!

热点排行