Fonce
Captain
- Registriert
- Feb. 2006
- Beiträge
- 3.447
Hi,
ich hätte da noch ein Problem mit Primefaces.
Ich habe dort einen Tree zu dem ich Node hinzufügen/löschen/umbennen kann.
Das Problem ist, das er bei diesen anscheinend immer den kompletten Tree aktualisiert und so wieder beim zugeklappten Root Tree landet.
Sieht da jemand den Fehler oder hat eine Idee?=
Hier die Form
Hier das Bean
ich hätte da noch ein Problem mit Primefaces.
Ich habe dort einen Tree zu dem ich Node hinzufügen/löschen/umbennen kann.
Das Problem ist, das er bei diesen anscheinend immer den kompletten Tree aktualisiert und so wieder beim zugeklappten Root Tree landet.
Sieht da jemand den Fehler oder hat eine Idee?=
Hier die Form
Code:
<h:form id="treeForm">
<p:contextMenu for="tree">
<p:menuitem value="Create" update="tree" onclick="PF('createFolderDlg').show();" icon="ui-icon-plus" />
<p:menuitem value="Rename" update="tree" onclick="PF('renameFolderDlg').show();" icon="ui-icon-edit" />
<p:menuitem value="Delete" update="tree" actionListener="#{folderTreeBean.deleteNode}" icon="ui-icon-close"/>
</p:contextMenu>
<p:growl id="messages" showDetail="true" />
<p:tree value="#{folderTreeBean.root}" dynamic="true" cache="false" selectionMode="single" selection="#{folderTreeBean.selectedNode}" var="node" id="tree" highlight="true" animate="true" >
<p:ajax event="expand" update=":treeForm:messages" listener="#{folderTreeBean.onNodeExpand}" />
<p:ajax event="collapse" update=":treeForm:messages" listener="#{folderTreeBean.onNodeCollapse}" />
<p:ajax event="select" update=":treeForm:messages" listener="#{folderTreeBean.onNodeSelect}" />
<p:ajax event="unselect" update=":treeForm:messages" listener="#{folderTreeBean.onNodeUnselect}" />
<p:treeNode id="treeNode" expandedIcon="ui-icon-folder-open"
collapsedIcon="ui-icon-folder-collapsed">
<h:outputText value="#{node}" id="lblNode" />
</p:treeNode>
</p:tree>
<p:dialog id="createDialog" header="Create Folder" widgetVar="createFolderDlg" modal="true" height="100">
<h:outputText value="Name:" />
<p:inputText value="#{folderTreeBean.newFolderName}"/>
<p:commandButton value="Create" action="#{folderTreeBean.createNode()}" update="tree" oncomplete="PF('createFolderDlg').hide();"/>
</p:dialog>
<p:dialog id="renameDialog" header="Rename Folder" draggable="false" widgetVar="renameFolderDlg" modal="true" height="100">
<h:outputText value="Name:" />
<p:inputText value="#{folderTreeBean.renameFolderName}"/>
<p:commandButton value="Rename" action="#{folderTreeBean.renameNode()}" update="tree" oncomplete="PF('renameFolderDlg').hide();" />
</p:dialog>
</h:form>
Hier das Bean
Code:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.rehborn.mydms.webapp;
import java.io.Serializable;
import java.util.List;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.event.NodeCollapseEvent;
import org.primefaces.event.NodeExpandEvent;
import org.primefaces.event.NodeSelectEvent;
import org.primefaces.event.NodeUnselectEvent;
import org.primefaces.model.DefaultTreeNode;
import org.primefaces.model.TreeNode;
import org.rehborn.mydms.FileSystem;
import org.rehborn.mydms.Folder;
/**
*
* @author Julian
*/
@Named
@SessionScoped
public class FolderTreeBean implements Serializable {
@Inject
private FileSystemBean dms;
private TreeNode root;
private DMSNode selectedNode;
private String newFolderName;
private String renameFolderName;
public String getRenameFolderName() {
return renameFolderName;
}
public void setRenameFolderName(String renameFolderName) {
this.renameFolderName = renameFolderName;
}
public String getNewFolderName() {
return newFolderName;
}
public void setNewFolderName(String newFolderName) {
this.newFolderName = newFolderName;
}
public TreeNode getSelectedNode() {
return selectedNode;
}
public void setSelectedNode(TreeNode selectedNode) {
this.selectedNode = (DMSNode) selectedNode;
}
public FolderTreeBean() {
}
public TreeNode getRoot() {
FileSystem fileSystem = dms.getDMSBackend("MYDMSTESTDOMAIN");
Folder rootFolder = fileSystem.getRootFolder();
root = new DefaultTreeNode("dummyRoot");
TreeNode node = new DMSNode(rootFolder, root);
List<Folder> children = fileSystem.getChildFolder(rootFolder);
buildTree(fileSystem, children, node);
return root;
}
private void buildTree(FileSystem fileSystem, List<Folder> childrenList, TreeNode rootNode) {
for (Folder folder : childrenList) {
TreeNode child = new DMSNode(folder, rootNode);
List<Folder> moreChilds = fileSystem.getChildFolder(folder);
if (!moreChilds.isEmpty()) {
buildTree(fileSystem, moreChilds, child);
}
}
}
public void onNodeExpand(NodeExpandEvent event) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Expanded", event.getTreeNode().toString());
FacesContext.getCurrentInstance().addMessage(null, message);
}
public void onNodeCollapse(NodeCollapseEvent event) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Collapsed", event.getTreeNode().toString());
FacesContext.getCurrentInstance().addMessage(null, message);
}
public void onNodeSelect(NodeSelectEvent event) {
selectedNode = (DMSNode) event.getTreeNode();
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Selected", event.getTreeNode().toString());
FacesContext.getCurrentInstance().addMessage(null, message);
}
public void onNodeUnselect(NodeUnselectEvent event) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Unselected", event.getTreeNode().toString());
FacesContext.getCurrentInstance().addMessage(null, message);
}
public void deleteNode(ActionEvent event) {
FileSystem fileSystem = dms.getDMSBackend("MYDMSTESTDOMAIN");
Folder folder = fileSystem.getFolder(selectedNode.getFolderId());
if (folder.equals(fileSystem.getRootFolder())) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Root can't deleted", selectedNode.toString());
FacesContext.getCurrentInstance().addMessage(null, message);
} else {
fileSystem.deleteFolder(folder);
selectedNode.getChildren().clear();
DMSNode newSelected = (DMSNode) selectedNode.getParent();
selectedNode.getParent().getChildren().remove(selectedNode);
// selectedNode.setParent(null);
selectedNode = newSelected;
// selectedNode.setExpanded(true);
}
}
public void renameNode(){
FileSystem fileSystem = dms.getDMSBackend("MYDMSTESTDOMAIN");
Folder folder = fileSystem.getFolder(selectedNode.getFolderId());
if (folder.equals(fileSystem.getRootFolder())) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Root can't deleted", selectedNode.toString());
FacesContext.getCurrentInstance().addMessage(null, message);
} else {
folder.setName(renameFolderName);
fileSystem.updateFolder(folder);
selectedNode.setData(folder.getName());
}
}
public void createNode() {
FileSystem fileSystem = dms.getDMSBackend("MYDMSTESTDOMAIN");
Folder parentFolder = fileSystem.getFolder(selectedNode.getFolderId());
Folder newFolder = new Folder(newFolderName, parentFolder);
fileSystem.createFolder(newFolder);
DMSNode newNode = new DMSNode(newFolder, selectedNode);
selectedNode = newNode;
}
}