myfaces-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Todd Patrick" <Todd.Patr...@dtn.com>
Subject RE: Tomahawk: Tree2: TreeNodeBase.getChildCount() question - Lazy Loading issue.
Date Fri, 07 Jul 2006 22:27:53 GMT
The error I received was NullPointerExceptions when I tried to expand
the tree.

Again, I believe this is all my issue due to how I am creating the
children. I tried to use TreeModelBase, but I am having a hard time
modifying my POJOs to pass in the model and parent parameters that you
have in the TreeModelBase constructor.

I wouldn't worry about creating an example - this is an issue on my end.
However your gesture is greatly appreciated.

I am going to spend a lot of time this weekend working on this issue.
This is a critical issue with my project.

Thanks,

--Todd



-----Original Message-----
From: Andrew Robinson [mailto:andrew.rw.robinson@gmail.com] 
Sent: Friday, July 07, 2006 4:17 PM
To: MyFaces Discussion
Subject: Re: Tomahawk: Tree2: TreeNodeBase.getChildCount() question -
Lazy Loading issue.

The "magic" of my code is just the fact that the base node reports "1"
for the child count *only if* the node has not loaded the children yet
and the node is not expanded. That is the big "gotcha". If you are not
using TreeModelBase or the default TreeState that it comes with that
base tree node from my blog will not work. My code is also using 1.1.2
but I don't think that should matter.

Your "repeated" A is because you reported a node count of 1, but
returned more or less nodes than 1 as children (that is why I had to add
the expanded code to my node).

What problems were you having with my code? I can try to help that way,
or if it doesn't seem to be working out, I can try during my free time
to build an example ZIP for you with source that does the lazy loading.

Were you getting errors, or was the tree just not working?

BTW - I am using TreeModelBase and not changing the expansion state of
the model (no overrides or customizations).

-Andrew

On 7/7/06, Todd Patrick <Todd.Patrick@dtn.com> wrote:
> I have been unsuccessful in implementing the Lazy Loading technique 
> that was described in the wiki or as described using AjaxAnywhere by 
> Andrew R.
>
> "By all means, this is my own fault and no one else, I greatly 
> appreciate everyone's help!"
>
> Therefore, I am at this point: I really just need the "plus sign"
> navigation displayed for every node, no matter if the node has a child

> or not.
>
> A user that clicks on the "plus sign" will run a server ActionEvent 
> that will get the children for that node.
>
> If there is no children, do nothing.
>
> I went back and studied the following comment on Andrew R. blog: "The
> tree2 renderer looks only at the getChildCount method, not the 
> getChildren method when rendering. Meaning that if getChildCount 
> should return 0, getChildren will never be called unless the node is
expanded."
>
> Ok, good... now I should just be able to override the getChildCount 
> method if I extend the TreeNodeBase class, such as:
>
> public int getChildCount() {
>         return 1;
> }
>
> So, in combination with the wiki example "Alternative Tree2 Lazy 
> Loading Method...by jtmille3":
>
> public class LazyTreeNode extends TreeNodeBase {
>
>         private static final long serialVersionUID = 
> -6870203633601493362L;
>
>         public LazyTreeNode() {
>         }
>
>         public LazyTreeNode(String type, String description, boolean
> leaf) {
>                 super(type, description, leaf);
>         }
>
>         public LazyTreeNode(String type, String description, String 
> identifier, boolean leaf) {
>                 super(type, description, identifier, leaf);
>         }
>
>           public int getChildCount() {
>                   return 1;
>           }
>
>         public List getChildren() {
>              // if there are no children, try and retrieve them
>                 if (super.getChildren().size() == 0) {
>                          super.getChildren().add(new 
> LazyTreeNode("document","" + id, "" + id,false));
>                 }
>
>                 return super.getChildren();
>         }
> }
>
> This doesn't work. What I end up with is the parent value repeated 
> such
> as:
>
> - A
> |_ A
> |_ A
> |_ A
>
> Instead, I should have:
>
> - A
> |_ B
> |_ C
> |_ D
>
> The way I build my tree children is in a *for* loop in the following
> method:
>
>  public void getTreeTransactBranch(String _transactID, TreeNode
> _transactNode) throws NamingException{
>         InitialContext ctx = new InitialContext();
>         DataSource ds = (javax.sql.DataSource) 
> ctx.lookup("jdbc/__Pool");
>         Connection con;
>         List< TransactRow >treeBranch = new LinkedList();
>
>         try {
>             con = ds.getConnection();
>             try {
>                 TransactRow tree = new TransactRow();
>                 treeBranch = tree.selectByParentID(con, _transactID);
>
>                 for (TransactRow row : treeBranch) {
>
childTransactLeafLabel.append(row.getXactTypeID());
>                     childTransactLeafLabel.append(spacer);
>                     childTransactLeafLabel.append(row.getName());
>                     childTransactLeafLabel.append(spacer);
>
> childTransactLeafLabel.append(this.getDuration(row.getTCreated()));
>                     _transactNode.getChildren().add(new
> LazyTreeNode("transactions", childTransactLeafLabel.toString(),
> row.getTransactID(), false));
>                     childTransactLeafLabel.delete(0, 
> childTransactLeafLabel.length());
>                 }
>
>             } catch (SQLException ex) {
>                 ex.printStackTrace();
>             }
>             con.close();
>         } catch (SQLException ex) {
>             ex.printStackTrace();
>         }
>     }
>
> When I build my children, I thought the values would be from within 
> the
> *for* loop.
>
> I'd appreciate any thoughts or suggestions.
>
> Thanks,
>
> --Todd
>

Mime
View raw message