【发布时间】:2011-07-26 19:41:53
【问题描述】:
我需要在 JSF 2.0 中实现一个带有上下文菜单(添加、删除、编辑)的内容树。请向我推荐一些组件。树节点应该是一个像 (Data, ID) 这样的对象。当我点击树节点时,我需要获取后端 bean 的 ID。
例子:
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
/* * 要更改此模板,请选择工具 |模板 * 并在编辑器中打开模板。 */
包 com.prime.tree;
导入 java.io.Serializable; 导入 javax.faces.application.FacesMessage; 导入 javax.faces.bean.ManagedBean; 导入 javax.faces.bean.SessionScoped; 导入 javax.faces.context.FacesContext; 导入 javax.faces.event.ActionEvent; 导入 org.primefaces.model.DefaultTreeNode; 导入 org.primefaces.model.TreeNode;
/** * * @作者维伦德拉 */ @ManagedBean @SessionScoped 公共类 TreeBean 实现可序列化 {
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;
}
}
【问题讨论】: