我需要在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;
}
}
嗨马特,谢谢你的回复。我已经使用PrimeFaces 2.2。但是,我无法正确表示数据。例如:TreeNode node0 = new DefaultTreeNode(“Node 0”,root);我需要代表一个对象,而不是“节点0”。 (Id,数据,索引等)。 – neni 2011-04-05 08:33:16
[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
如果我把一个对象obj1(Id,data,sortIndex,content)。树不显示。 – neni 2011-04-05 08:47:09