【问题标题】:How to highlight a primefaces tree node from backing bean如何从支持 bean 突出显示 primefaces 树节点
【发布时间】:2011-04-07 05:28:17
【问题描述】:

我正在使用 primefaces 树组件。树有一个上下文菜单(添加节点、编辑节点、删除节点)。执行一些操作后,我需要刷新树,然后突出显示添加或编辑的节点。

这是我的代码。

index.xhtml

        <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>

treeBean.java

公共类 TreeBean 实现可序列化 {

private TreeNode root;

public TreeBean() {
    root = new DefaultTreeNode("Root", null);
    // GET the root nodes first L0
    List<TracPojo> rootNodes = SearchDao.getRootNodes111();
    Iterator it = rootNodes.iterator();

    while (it.hasNext()) {

        TracPojo t1 = (TracPojo) it.next();

        String tid = t1.getTopicID();

        TreeNode node1 = new DefaultTreeNode(t1, root);

    }


}
 public TreeNode getRoot() {
    return root;
 }


public void addChildNode(ActionEvent actionEvent) 
{

    List record = NewSearchDao.getRecord(selectedNode);

    Iterator it = record.iterator();
    while (it.hasNext()) {
        Object[] record1 = (Object[]) it.next();
        setParentID_dlg((String) record1[0]);
        setSortIndex((Integer) record1[2]);
    }

}

public void saveChilddNode() {
    System.out.println("Save as Child Node ........");

}

}

【问题讨论】:

    标签: jsf-2 primefaces


    【解决方案1】:

    Primefaces p:treeNode 有一个属性 styleClass。您可以从您的支持 bean 动态设置它。视图如下所示:

    <p:tree>
      <p:treeNode styleClass="#{treeBean.styleClass}">
        <h:outputText value="#{node}" />
      </p:treeNode>
    </p:tree>
    

    然后使用 get/set 方法将成员 styleClass 添加到您的 TreeBean,该方法返回表示样式类的字符串:

    public class TreeBean implements Serializable {
      private String styleClass;
      ...
      public String getStyleClass() {
        // your style selection logic here
      }
      ...
    }
    

    不要忘记将样式类添加到您的 css 中。

    【讨论】:

    • 嗨,马特,感谢您的回复。 StyleClass 用于指定节点样式(mp3Style、图片等...)。但是,我的要求不同。在单个选择树中,如果我们单击一个树节点,它将以某种颜色突出显示(例如:primefaces.org/showcase/ui/treeSelectionSingle.jsf)。我想刷新树,展开父节点并以蓝色突出显示新添加的树节点(树节点,而不是数据)。
    • 给出清晰的图片: 1) 我有一个带有上下文菜单的单选树(添加子、编辑、删除)。 2)当我点击添加孩子时,将打开一个对话框,其中包含必填字段和一个按钮(保存)。 3)当我点击保存按钮时,我将节点插入数据库并重新加载树。我丢失了选定的节点并且树正在折叠。 4)我只需要刷新树并突出显示新添加的节点。
    【解决方案2】:

    除非您将您声明为 selection="#{treeBean.selectedNode}" 的 selectedNode 设置为 null,否则它已经被选中,您唯一需要做的就是更新来自触发组件的树组件;在你的情况下是:

    <p:menuitem update=":yourForm:pTree"   /*rest of the stuff*/    />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多