2013-12-16 23 views
0

我正在使用數據庫中的文件夾。每個文件夾是由其父引用:當我點擊他們的名字BreadCrumb與數據庫中的PrimeFaces

 id ref 
root 0 0 
me  1 0 
folder 2 0 
inme 3 1 

每個文件夾中顯示。 「commandLink」有一個參數:文件夾ID。它工作得很好,但我不知道如何保持路徑的軌跡: 我想要像root > me > inme

有沒有什麼辦法可以在URL中使用後備bean來實現「.../root/me/inme」?

感謝

回答

0

只是自己寫的,看看這個:

頁:

<h:form id="form1"> 
    <h:outputText id="trackmsg" value="#{MyBean.trackMsg}"/> 
    <p:dataTable value="#{MyBean.folderList}" var="folder" style="width: 300px"> 
     <p:column headerText="name"> 
      <p:commandLink value="#{folder.name}" action="#{MyBean.track(folder.id)}" update=":form1:trackmsg"/> 
     </p:column> 
     <p:column headerText="id"> 
      <h:outputText value="#{folder.id}"/> 
     </p:column> 
     <p:column headerText="ref"> 
      <h:outputText value="#{folder.ref}"/> 
     </p:column> 
    </p:dataTable> 
</h:form> 

輔助Bean:(就在兩個主要方法:track()findParent()

private List<Folder> folderList=new ArrayList<>(); 
private String trackMsg="";//to show tracks of the path: root>me>inme 

@PostConstruct 
public void init(){//Just initialize thr list 
    folderList.add(new Folder("root", 0, 0)); 
    folderList.add(new Folder("me", 1, 0)); 
    folderList.add(new Folder("folder", 2, 0)); 
    folderList.add(new Folder("inme", 3, 1)); 
    folderList.add(new Folder("ininme", 4, 3)); 
} 

public void track(int id){//to composite the track path 
    trackMsg=""; 
    Folder selectedFolder=new Folder(); 
    for(Folder fold:folderList) //find the selected Folder 
     if(fold.getId()==id) 
     { 
      selectedFolder=fold; 
      if(selectedFolder.getId()!=selectedFolder.getRef())//if so, it means the root folder 
      trackMsg=">"+selectedFolder.getName(); 
     } 

    Folder parentFolder=findParent(selectedFolder);//get the parent folder of the selected folder 

    while(parentFolder!=null && parentFolder.getId()!=parentFolder.getRef()){//while there is parent folder and not root folder 
     trackMsg=">"+parentFolder.getName() + trackMsg; 
     parentFolder=findParent(parentFolder);//find the parent of parent 
    } 

    trackMsg="root"+trackMsg;//the last, root folder 
} 

public Folder findParent(Folder child){//find the parent folder of the passing folder 
    for(Folder fold:folderList) 
     if(fold.getId()==child.getRef()) 
      return fold; 
    return null; 
} 

當我在DataTable中單擊 「ininme」,它看起來像:

enter image description here