部分代码如下:
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的时候哪个地方设错了?请高手指点,谢谢!!
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的时候哪个地方设错了?请高手指点,谢谢!!
解决方案 »
- 数据库连接不上,请指点下
- web开发关于用jsp开发网页的问题(本人新手)
- Struts2怎么实现for循环
- 使用postgresql 的shp2pgsql工具转换sql语句后建表时报错
- 请看一下这段代码!!!!!!!!!
- 调用wsdl出错,怎么解决??
- JSP页面帮忙做一下,本人目前只会做SERVLET,进销系统
- jsp页面如何像asp中的sub那样定义过程
- 有谁知道下那些jsp做电子商务网站的源代码的地方。我想学一还立马给分,一下就给啊
- 求问,用struts从jsp向action传递一个list数据
- jsf datatable如何将数据返回到数据库里?
- 如何用jsp在web页面中画矩形,并且在矩形框写文字?
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
treenode.setUrl(你所要指定的action);这是我以前用过的树标签,和你的不完全一样,但我看差不多。
请问gxh19841007 你的树有没有搞定,我这两天要完成一个jsf的树。从数据库中读组织列表,根据根组织,一级一级的遍历下面的组织。谢谢了