2011-03-31 52 views
0

我需要在JSF 2.0中使用上下文菜单(添加,删除,编辑)实现内容树。请给我建议一些组件。树节点应该是像(Data,ID)这样的对象。当我点击树节点时,我需要将id发送到后端bean。使用JSF 2.0和Hibernate的上下文菜单树

实施例:

的index.xhtml

总理树

 <p:growl id="messages" showDetail="true" /> 


     <p:tree value="#{treeBean.root}" var="node" id="pTree" 
       selectionMode="single" selection="#{treeBean.selectedNode}"> 

      <p:treeNode> 
       <h:outputText value="#{node}" /> 
      </p:treeNode> 
     </p:tree> 
     <p:contextMenu for="pTree" id="cmenu"> 
      <p:menuitem value="Add topic as child" update="pTree, cmenu" 
         actionListener="#{treeBean.addChildNode}" /> 
      <p:menuitem value="Add topic Below" update="pTree, cmenu" 
         actionListener="#{treeBean.addTopicBelow}" /> 
      <p:menuitem value="Delete Topic" update="pTree, cmenu" 
         actionListener="#{treeBean.deleteNode}" /> 
     </p:contextMenu> 

    </h:form> 
</h:body> 

TreeBean.java

/* *要更改此模板,请选择工具|模板 *并在编辑器中打开模板。 */

package com.prime.tree;

import java.io.Serializable; import javax.faces.application.FacesMessage; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import javax.faces.context.FacesContext; import javax.faces.event.ActionEvent; import org.primefaces.model.DefaultTreeNode; import org.primefaces.model.TreeNode;

/** * * @author韦雷德拉 */ @ManagedBean @SessionScoped 公共类TreeBean实现Serializable {

private TreeNode root; 

private TreeNode selectedNode; 

public TreeBean() { 
    root = new DefaultTreeNode("Root", null); 
    List rootNodes<Employee> = SearchDao.getRootNodes(); 

    Iterator it = rootNodes.iterator(); 
    while (it.hasNext()) { 

     TreeNode node1 = new DefaultTreeNode(**it.next()**, root); 
     **/* in place of it.next() I need to display empName. When I click on empName, I need to get the Id(Pkey). */** 

    } 

} 

public TreeNode getRoot() { 
    return root; 
} 

public TreeNode getSelectedNode() { 
    return selectedNode; 
} 

public void setSelectedNode(TreeNode selectedNode) { 
    this.selectedNode = selectedNode; 
} 



public void addChildNode(ActionEvent actionEvent) { 
    System.out.println("Selected Node: "+getSelectedNode().toString()); 
    TreeNode newNode = new DefaultTreeNode("Node New", getSelectedNode()); 
    getSelectedNode().setExpanded(true); 
} 
public void addTopicBelow(ActionEvent actionEvent){ 
    TreeNode newNode = new DefaultTreeNode("Node New", getSelectedNode().getParent()); 
} 
public void deleteNode(ActionEvent actionEvent){ 
    System.out.println("Node to be deleted: "+getSelectedNode().toString()); 
    //getSelectedNode(). 
} 

}

Employee.java

公共班员工{

private String empID; 
private String empName; 

/** 
* @return the empName 
*/ 
public String getEmpName() { 
    return empName; 
} 

/** 
* @param empName the empName to set 
*/ 
public void setEmpName(String empName) { 
    this.empName = empName; 
} 

/** 
* @return the empID 
*/ 
public String getEmpID() { 
    return empID; 
} 

/** 
* @param empID the empID to set 
*/ 
public void setEmpID(String empID) { 
    this.empID = empID; 
} 

}

回答

1

你可以看看在组合与ContextMenuPrimefaces Tree组件。

您可以在后台bean中构建您的树并按照Primefaces展示的示例中所述获取选定节点。

+0

嗨马特,谢谢你的回复。我已经使用PrimeFaces 2.2。但是,我无法正确表示数据。例如:TreeNode node0 = new DefaultTreeNode(“Node 0”,root);我需要代表一个对象,而不是“节点0”。 (Id,数据,索引等)。 – neni 2011-04-05 08:33:16

+0

[DefaultTreeNode类](http://code.google.com/p/primefaces/source/browse/core/trunk/src/main/java/org/primefaces/model/DefaultTreeNode.java?r=2776)一个构造函数'public DefaultTreeNode(Object data,TreeNode parent)'。所以你可以把任何对象作为数据,而不仅仅是String。 – 2011-04-05 08:44:30

+0

如果我把一个对象obj1(Id,data,sortIndex,content)。树不显示。 – neni 2011-04-05 08:47:09