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 <[email protected]> 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 <[email protected]
>> <mailto:[email protected]>> 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
>>
>>
>>
>>
>>
>>
>
>