Java 来自数据库的带有PrimeFaces的面包屑
我正在处理数据库中的文件夹。每个文件夹都由其父文件夹引用:Java 来自数据库的带有PrimeFaces的面包屑,java,primefaces,directory,breadcrumbs,backing-beans,Java,Primefaces,Directory,Breadcrumbs,Backing Beans,我正在处理数据库中的文件夹。每个文件夹都由其父文件夹引用: id ref root 0 0 me 1 0 folder 2 0 inme 3 1 当我单击每个文件夹的名称时,它们都会显示出来。“commandLink”有一个参数:文件夹ID。它工作得很好,但我不知道如何跟踪路径: 我想要像root>me>inme这样的东西 是否有任何方法可以使用支持bean在URL“../root/me/inme”中虚拟地添加内容 谢谢我自己写的,检查一下: 页面
id ref
root 0 0
me 1 0
folder 2 0
inme 3 1
当我单击每个文件夹的名称时,它们都会显示出来。“commandLink”有一个参数:文件夹ID。它工作得很好,但我不知道如何跟踪路径:
我想要像root>me>inme
这样的东西
是否有任何方法可以使用支持bean在URL“../root/me/inme”中虚拟地添加内容
谢谢我自己写的,检查一下: 页面:
<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>
当我在dataTable中单击“ininme”时,它看起来像:
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;
}