RequestContext.getCurrentInstance().addPartialTarget(tree) -----Ursprüngliche Nachricht----- Von: Muhibbul Chowdhury [mailto:muhibbul.chowdh...@gmail.com] Gesendet: Montag, 19. November 2012 18:46 An: Scott O'Bryan Cc: MyFaces Discussion Betreff: Re: Need help in trinidad tree component
Hi, Thanks. Can you please send a sample code how to add trinidad component as a partial target? On Mon, Nov 19, 2012 at 11:29 AM, Scott O'Bryan <darkar...@gmail.com> wrote: > I don't have time to look through the entire thing, but I think if you > add your tree component as a partial target, it might give you what you want. > I believe your model is being updated properly but I'm not sure the > changes to the component are being sent. This is just a quick > suggestion based on the symptom. > > On Thu Nov 15 15:03:20 2012, muhibd23 wrote: > >> >> Hello, >> I am working on a web application. Everything is working fine. I just >> need a simple help. I have populated a tree using JSF/trinidad tree >> component. >> However, I want to expand the tree branches by clicking (+) sign and >> collapse the tree branches by clicking (-) sign. It's not working >> properly. >> What's happening is that, I have to click the (+) sign and then click >> the root node to expand the next branch. Similarly, While collapsing, >> I have to click the (-) sign and then click the child node to >> collapse it, but I want to expand/ collapse nodes by clicking (+) or >> (-) sign. >> >> My jsp side code: >> >> <trh:cellFormat valign="top"> >> <tr:panelHeader> >> <script type="text/javascript" >> src="CollapsibleLists.js"></**script> >> <tr:tree var="node" >> value="#{fileTreeHandler.**treeModel}"> >> <f:facet name="nodeStamp"> >> <tr:panelGroupLayout> >> <tr:commandLink text = >> "#{node.description}" >> >> actionListener="#{**fileTreeHandler.downloadFile}"**/> >> </tr:panelGroupLayout> >> </f:facet> >> </tr:tree> >> </tr:panelHeader> >> </trh:cellFormat> >> >> Here is the filetreehandler code: >> >> import org.acegisecurity.**Authentication; >> import org.acegisecurity.context.**SecurityContextHolder; >> import org.apache.log4j.Logger; >> import org.apache.myfaces.trinidad.**component.core.data.CoreTree; >> import org.apache.myfaces.trinidad.**event.FocusEvent; >> import org.apache.myfaces.trinidad.**model.ChildPropertyTreeModel; >> import org.apache.myfaces.trinidad.**model.RowKeySet; >> import org.apache.myfaces.trinidad.**model.TreeModel; >> >> import javax.faces.context.**ExternalContext; >> import javax.faces.context.**FacesContext; >> import javax.servlet.http.**HttpServletResponse; >> import java.io.*; >> import java.util.ArrayList; >> import java.util.Iterator; >> import java.util.List; >> >> /** >> * A Simple tree model used to create a graphical tree >> representation for a >> * given directory. >> * >> * @author Ric Smith, Oracle Corp. >> */ >> @SessionScoped >> public class FileTreeHandler implements Serializable { >> >> /** Apache tree model. */ >> private TreeModel treeModel; >> private static final long serialVersionUID = 1L; >> >> /** Was a node found. */ >> private boolean foundDirectory = false; >> >> //private RowKeySet disclosedEntries; >> private CoreTree tree; >> private Object clickedNodeRowKey; >> >> >> /** Logging for the class. */ >> private Logger logger = Logger.getLogger(this.**getClass()); >> >> /** >> * Constructor. >> * Reads the given directory. >> * Sets the treeModel nodes for all files and directories in the >> * input directory. >> * >> * @param baseDirectory >> */ >> //RowKeySetImpl rowKeySet = new RowKeySetImpl(); >> public FileTreeHandler(String baseDirectory) { >> logger.debug("In constructor"); >> List<FileNode> nodes = new ArrayList<FileNode>(); >> Authentication authentic = >> SecurityContextHolder.**getContext().**getAuthentication(); >> String username = authentic.getName(); // Storing logged in >> username into String >> String dir = baseDirectory + "/" + username; >> FileNode rootNode = buildFileTree(dir); >> if (rootNode.getChildCount() == 0) { >> setFoundDirectory(false); >> } else { >> setFoundDirectory(true); >> } >> nodes.add(rootNode); >> treeModel = new ChildPropertyTreeModel(nodes, "children") { >> public boolean isContainer() { >> return ((FileNode) getRowData()).getChildCount() > 0; >> } >> }; >> >> //UIXHierarchy tree = (UIXHierarchy)treeModel.**getRowData(); >> // RowKeySet disclosedEntries = new RowKeySetTreeImpl(); >> //disclosedEntries.**setCollectionModel(treeModel); >> } >> >> /** >> * Simple action event used to init the download of a file >> within the tree. >> * >> * >> * @param evt >> * @throws IOException >> */ >> public void downloadFile(String evt) throws IOException { >> FileNode selectedNode = ((FileNode) treeModel.getRowData()); >> if (!selectedNode.isDir()) { >> File selectedFile = selectedNode.getFile(); >> downloadFile(selectedFile); >> } >> } >> >> /** >> * A helper method to setup the current session for the download. >> * >> * @param file >> * @throws IOException >> */ >> private static void downloadFile(File file) throws IOException { >> >> FacesContext facesContext = FacesContext.**getCurrentInstance(); >> ExternalContext extContext = facesContext.** >> getExternalContext(); >> Long length = file.length(); >> >> HttpServletResponse response = (HttpServletResponse) extContext >> .getResponse(); >> //response.setContentType("**applicatiion/octet-stream"); >> response.setHeader("Content-**Disposition", >> "attachment;filename=\"" >> + file.getName() + "\""); >> response.setContentLength((**int) length.intValue()); >> >> InputStream in = new FileInputStream(file); >> OutputStream out = response.getOutputStream(); >> >> byte[] buf = new byte[4096]; >> int count; >> while ((count = in.read(buf)) >= 0) { >> out.write(buf, 0, count); >> } >> count = 0; >> while ((count = in.read(buf)) >= 0) { >> out.write(buf, 0, count); >> } >> in.close(); >> out.flush(); >> out.close(); >> facesContext.responseComplete(**); >> } >> >> /** >> * Generates a tree of FileNodes for a given dir. >> * >> * @param dirpath >> * @return >> */ >> private static FileNode buildFileTree(String dirpath) { >> File root = new File(dirpath); >> return visitAllDirsAndFiles(root); >> } >> >> >> /* public void handleRowDisclosure(**RowDisclosureEvent >> rowDisclosureEvent) >> throws Exception { >> Object rowKey = null; >> UIXHierarchy rowData = null; >> String viewDefName = null; >> TreeModel treemodel = (TreeModel)rowDisclosureEvent.** >> getSource(); >> RowKeySet rks = rowDisclosureEvent.**getAddedSet(); >> if (rks != null) { >> int setSize = rks.size(); >> if (setSize > 1) { >> throw new Exception("Unexpected multiple row >> disclosure row sets"); >> } >> >> if (setSize == 0) >> return; >> rowKey = rks.iterator().next(); >> treemodel.setRowKey(rowKey); >> rowData = (UIXHierarchy)treemodel.**getRowData(); >> >> if (rowData.getContainerRowKey() != null) { >> viewDefName = >> rowData.getContainerRowKey().**g; >> } >> } >> } */ >> >> /** >> * Recurses over a given directory. >> * >> * @param dir >> * @return >> */ >> private static FileNode visitAllDirsAndFiles(File dir) { >> FileNode parentNode = process(dir); >> if (dir.isDirectory()) { >> String[] children = dir.list(); >> for (int i = 0; i < children.length; i++) { >> FileNode childNode = visitAllDirsAndFiles(new File(dir, >> children[i])); >> parentNode.getChildren().add(**childNode); >> } >> } >> return parentNode; >> } >> >> /** >> * Creates a file node for a given file. Any file processing >> should be done >> * here. >> * >> * @param dir >> * @return FileNode >> */ >> public static FileNode process(File dir) { >> FileNode node = new FileNode(dir); >> return node; >> } >> >> public void clickTree(FocusEvent event) >> { >> RowKeySet rks = getTree().getDisclosedRowKeys(**); >> rks.invert(); >> >> List<List> clickedNodePath = (List<List>) clickedNodeRowKey; >> Iterator i = getTree().getDisclosedRowKeys(**).iterator(); >> >> boolean closedNode = false; >> while (i.hasNext()) { >> List openNodePath = (List) i.next(); >> if (openNodePath.equals(**clickedNodeRowKey)) { >> rks.remove(clickedNodePath); >> closedNode = true; >> } >> } >> >> // open clicked node >> if (!closedNode) { >> rks.add(clickedNodePath); >> } >> >> } >> /*public void handleRowDisclosure(**RowDisclosureEvent event) >> { >> RowKeySet added = event.getAddedSet(); >> RowKeySet removed = event.getRemovedSet(); >> if(disclosedEntries == null) >> { >> disclosedEntries = added; >> } >> else >> { >> if(!added.isEmpty()) >> { >> disclosedEntries.addAll(added)**; >> } >> if(!removed.isEmpty()) >> { >> disclosedEntries.removeAll(**removed); >> } >> } >> }*/ >> >> public void setTreeModel(TreeModel treeModel) { >> this.treeModel = treeModel; >> } >> >> public TreeModel getTreeModel() { >> return treeModel; >> } >> >> public boolean getFoundDirectory() { >> return foundDirectory; >> } >> >> public void setFoundDirectory(boolean foundDirectory) { >> this.foundDirectory = foundDirectory; >> } >> >> public void setTree(CoreTree tree) { >> this.tree = tree; >> } >> >> public CoreTree getTree() { >> return tree; >> } >> public void setClickedNodeRowKey(Object clickedNodeRowKey) { >> this.clickedNodeRowKey = clickedNodeRowKey; >> } >> public Object getClickedNodeRowKey() { >> return clickedNodeRowKey; >> } >> >> /* public RowKeySetImpl getRowKeySet() >> { >> return rowKeySet; >> } >> >> public void setRowKeySet(RowKeySetImpl rowKeySet) >> { >> this.rowKeySet = rowKeySet; >> } */ >> >> >> } >> >> However, I'm using Spring here. I know I'm doing something wrong, but >> no idea. Please help. >> >> Thanks >> >> >> > > _______________________________________________________________________________ Abonnieren Sie unseren Infobrief und erfahren Sie regelmäßig die neuesten Nachrichten über unsere Lösungen, aktuellen Projekte und Entwicklungen. Melden sie sich an mit diesem Link http://www.datenzentrale.de/Info-Brief _______________________________________________________________________________ Datenzentrale Baden-Württemberg, Anstalt des öffentlichen Rechts Krailenshaldenstr. 44, 70469 Stuttgart Telefon (0711) 8108-20, Telefax (0711) 8108-21350 E-Mail i...@dzbw.de, Internet www.datenzentrale.de Vorstand: Karl Tramer (Vors.) und Joachim Kischlat, Vorsitzender des Verwaltungsrats: Gunter Czisch USt-Id-Nr. DE147794223 _______________________________________________________________________________