【问题标题】:Tree with context menu using JSF 2.0 and Hibernate使用 JSF 2.0 和 Hibernate 的带有上下文菜单的树
【发布时间】: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;
}

}

【问题讨论】:

    标签: tree jsf-2


    【解决方案1】:

    您可以结合ContextMenu 来查看Primefaces Tree 组件。

    您可以在支持 bean 中构建您的树并获取所选节点,如 Primefaces 展示的示例中所述。

    【讨论】:

    • 嗨,马特,谢谢您的回复。我已经使用过 PrimeFaces 2.2。但是,我无法正确表示数据。例如:TreeNode node0 = new DefaultTreeNode("Node 0", root);我需要代表一个对象,而不是“节点 0”。 (ID、数据、索引等)。
    • DefaultTreeNode class 有一个构造函数 public DefaultTreeNode(Object data, TreeNode parent)。所以你可以把任何对象作为数据,而不仅仅是字符串。
    • 如果我放置一个对象 obj1(Id, data, sortIndex, content)。树没有显示。
    • 你能用一些facelet和bean的代码更新你的答案吗?
    • p:treeNode 标签中使用&lt;h:outputText value="#{node.empName}" /&gt; 而不是引用节点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 2012-09-17
    相关资源
    最近更新 更多