[prev in list] [next in list] [prev in thread] [next in thread] 

List:       myfaces-user
Subject:    Re: Need help in trinidad tree component
From:       Muhibbul Chowdhury <muhibbul.chowdhury () gmail ! com>
Date:       2012-11-21 19:25:34
Message-ID: CACoi3FpqE=gHx_SJ27hjHNXSKefEa8ta6apAgv4E5P4vG5xbUw () mail ! gmail ! com
[Download RAW message or body]


Hi Scott,
I solved that problem. It was basically java Script problem that has been
solved. However two more requirements:
1) I have to expand the tree by clicking the nodes.
2) When the web application will be first loaded, then the tree will be
expanded with only first level. That means:
If    A
      --->B
            ----->D
      ---->C
             ---->E

is a tree then my requirement is(When application is first loaded):
      A
       ----->B
       ------>C

I'm sure it can be done. Can u help me with some direction and sample code?

Thanks

On Mon, Nov 19, 2012 at 12:50 PM, Scott O'Bryan <darkarena@gmail.com> wrote:

> http://myfaces.apache.org/**trinidad/trinidad-api/apidocs/**
> org/apache/myfaces/trinidad/**context/RequestContext.html<http://myfaces.apache.org/ \
> trinidad/trinidad-api/apidocs/org/apache/myfaces/trinidad/context/RequestContext.html>
>  
> Look up addPartialTarget.
> 
> To do it declaratively you need to look in the tag doc under
> partialTriggers.
> 
> Hope that helps.
> 
> Scott
> 
> 
> On Mon Nov 19 10:45:45 2012, Muhibbul Chowdhury wrote:
> 
> > 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 <darkarena@gmail.com
> > <mailto:darkarena@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
> > 
> > 
> > 
> > 
> > 
> > 
> 
> 



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic