读书人

myfaces的tree2组件生成树形菜单后为

发布时间: 2012-01-07 21:41:55 作者: rapoo

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 专业的编程开发类网站,网络编程,软件开发,网站开发,一切尽在这里!

读书人网 >Java Web开发

热点推荐