使用primefaces树组件作为导航菜单

时间:2011-01-21 22:47:41

标签: primefaces

我正在为我的学校建立一个商店网站,我正在尝试添加一个树作为类别菜单,但我无法导航到另一个页面。我在控制器中收到了所有必要的数据,但我不知道如何导航到browseByCategory页面。

我必须提到我在Java JSF中是一个noooobie。任何代码将不胜感激。

谢谢你, 丹尼斯

2 个答案:

答案 0 :(得分:2)

有两种方法可以做到这一点: 1)您可以导航到另一个页面:

DefaultTreeNode node0 = new DefaultTreeNode("<a href=\"http://www.google.pl\">http://www.google.pl</a>", null);

2)或在你的nodeSelectEvent中这样:

 <p:tree dynamic="true" value="#{TreeBean.root}" var="node" expandAnim="FADE_IN" collapseAnim="FADE_OUT" nodeSelectListener="#{TreeBean.onNodeSelect}">
            <p:treeNode>
                <h:outputText value="#{node}" /> 
            </p:treeNode>
        </p:tree>



public void onNodeSelect(NodeSelectEvent event){
        String url = event.getTreeNode().getData().toString();
        System.out.println(event.getTreeNode().getData().toString());
        try {
            //redirection
            FacesContext.getCurrentInstance().getExternalContext().redirect(url);
        } catch (IOException ex) {
            //Logger.getLogger(TreeBean.class.getName()).log(Level.SEVERE, null, ex);
        } 
    }

答案 1 :(得分:1)

问题:r.piesnikowski分享的建议不正确。即以下代码不起作用:

DefaultTreeNode node0 = new DefaultTreeNode("<a href=\"http://www.google.pl\">http://www.google.pl</a>", null);

此外,最新版本的p:tree中不存在“nodeSelectListener”属性。

解决方案:使用h:outputLink在Primefaces TreeNode中使用链接的正确方法如下:

<h:form>
  <p:tree value="#{treeView.root}" var="node">
       <p:treeNode>
           <h:outputLink value="#{node.url}">#{node.label}</h:outputLink>
       </p:treeNode>
  </p:tree>
</h:form>

使用两个属性String url和String label创建另一个类(让我们称之为LinkNode)。在创建新节点时,使用必需的url&amp;传递LinkNode类的新对象。标签到新的DefaultTreeNode(对象数据,TreeNode父),即new DefaultTreeNode(new LinkNode(“http://example.com”,“Go to example.com”),root)。

@Named
@ViewScoped
public class TreeView implements Serializable{
    private TreeNode root;

    @PostConstruct
    public void init() {
        root = new DefaultTreeNode("Root", null);
        TreeNode parent1 = new DefaultTreeNode(new LinkNode("http://example.com","Go to example.com"), root);
        TreeNode parent2 = new DefaultTreeNode(new LinkNode("http://example.org","Go to example.org"), root);
   }
}

和这样的LinkNode类:

public class LinkNode implements Serializable{
    private String label; // add setter & getter as needed
    private String link; // add setter & getter as needed

    LinkNode(String label, String link){
        this.label = label;
        this.link = link;
    }
}

希望它有所帮助。我自己测试了这个方法。