I'm getting the same behavior as both of you.  I get it with 
@action and @actionListener .  I get it with the HEAD branch 
and 1.0.9 .  I get it when I add nodes and remove nodes.

I'll take a look this weekend.  If there aren't any bright 
ideas between now and next week, I'll open a bug so that we 
can discuss this at the "tree2 summit" .

---- Original message ----
>Date: Fri, 22 Jul 2005 17:44:40 -0400
>From: "Vo, Ky" <[EMAIL PROTECTED]>  
>Subject: RE: tree3 component reload  
>To: "'MyFaces Discussion'" <users@myfaces.apache.org>
>
>Hi,
>
>I had the exact problem using tree2.  I started to play 
around with the
>setValue method from HtmlTree.  It seems to do the trick.  
The only problem
>is the initial click to process the actionListener.  (I'm 
still trying to
>solve this problem (bug?))  After going to load my initial 
tree, I click on
>a node to process the actionListener.  It seems to be 
reloading the initial
>tree again after I click on the node and it doesn't expand 
the node.  After
>that initial click on the tree, the actionListener works 
like its supposed
>to and adds children to the tree with every click.  
Maybe "<x:tree2
>value="#{treeBacker.treeData" ... >" is not being set 
correctly on the
>initial load of the page.  Do I somehow need to do a 
setValue in my
>treeData() method like in the processAction method for the 
actionListener?
>
>-Ky
>
>Here's the code I used:
>
>In JSP
>-----
>               <x:tree2 value="#{treeBacker.treeData}" 
id="server-tree"
>                       var="node" varNodeToggler="t"
>clientSideToggle="false" showRootNode="false">
>                       <f:facet name="tree-type">
>                               <h:panelGroup>
>                                       <h:commandLink 
immediate="true"
>action="#{t.toggleExpanded}">
>                                       
        <f:actionListener
>type="com.x.TreeBackerListener"/>
>                                       
        <h:graphicImage
>value="/images/yellow-folder-open.png"
>       
>rendered="#{t.nodeExpanded}" border="0" />
>                                       
        <h:graphicImage
>value="/images/yellow-folder-closed.png"
>       
>rendered="#{!t.nodeExpanded}" border="0" />
>                                       </h:commandLink>
>                                       <h:outputText
>value="#{node.description}" styleClass="nodeFolder" />
>                               </h:panelGroup>
>                       </f:facet>
>               </x:tree2>
>
>In class TreeBackerListener
>----
>public class StudyDBTreeListener implements ActionListener {
>
>       public TreeNode treeData() {
>               TreeNode treeData = new TreeNodeBase("tree-
type", "Tree
>Description", true);
>               
>               TreeNode newNode = new TreeNodeBase("tree-
type",
>"Description", "Identifier", true);
>               treeData.getChildren().add(addModelNode);
>
>               return treeData;
>       }
>
>       public void processAction(ActionEvent actionEvent) {
>
>               UIComponent component = 
actionEvent.getComponent();
>               UIComponent parent = component.getParent
().getParent();
>
>               HtmlTree tree = (HtmlTree) parent;
>
>               TreeNode treeData = tree.getNode();
>               String treeType = treeData.getType();
>               
>               //Important to check to see if node has any 
children.
>               //Without the children check, it adds the 
same childen to
>the 
>               //node over again (if this is what you want 
then take out
>the
>               //child count check.
>               if(treeType.equals("tree-type") && 
treeData.getChildCount()
>== 0){
>
>                       TreeNode newNode = new TreeNodeBase
("tree-type",
>"description", 
>                                               "identifier", 
true);
>                       treeData.getChildren().add(newNode);
>
>               }
>
>               TreeNode treeDataRoot = (TreeNode) 
tree.getValue();
>               tree.setValue(treeDataRoot);
>               
>       }
>}
>
>-----Original Message-----
>From: Edwin Mercado [mailto:[EMAIL PROTECTED] 
>Sent: Friday, July 22, 2005 1:43 PM
>To: MyFaces Discussion
>Subject: RE: tree3 component reload
>
>
>Here's the action listener for the add child node
>command link:
>
> public void createProArgumentationNode(ActionEvent event)
> {
>  ArgumentationNode child = createNode();
>  ArgumentationNode parent = getCurrentNode();
>  addEdge(child, parent, true);
>
>  /* view updated model data */ 
>  focusNode(event, child);
>  toggleSelectedNode();
>
> }
>loadTreeData() gets called twice by the getTreeData()
>BEFORE the addition of the new node and once AFTER.
>Apparently, the tree model is updated with the previous 
(old) data.
>
>Edwin
>-----Original Message-----
>From: Dennis Byrne [mailto:[EMAIL PROTECTED]
>Sent: Friday, July 22, 2005 4:34 PM
>To: MyFaces Discussion
>Subject: Re: tree3 component reload
>
>
>Can you post the code for your action listener?  I'm curious 
>to see if loadTreeData() is being called after or before you 
>updating the tree model.
>
>---- Original message ----
>>Date: Fri, 22 Jul 2005 15:40:22 -0400
>>From: Edwin Mercado <[EMAIL PROTECTED]>
>>Subject: tree3 component reload  
>>To: users@myfaces.apache.org
>>
>>Hello all,
>>I'm still baffled by the JSF phases. I'm using a tree3
>component
>>that is a tied to a getTreeData() function to retrieve the
>current data
>>from the model. Everytime I select a node, the getTreeData()
>function is
>>called 3 times, retrieving the same data every time.
>>
>><a:tree3 expandAllInit="true" id="networkTree"
>>                              value="#
>{treeBacker.treeData}" var="node"
>>varNodeToggler="t"
>>                              clientSideToggle="true">
>>...
>></a:tree3>
>>
>> public TreeNode getTreeData()  {
>>  treeData = loadTreeData();
>>  return treeData;
>> }
>>
>>
>>Now, for each tree3 node that has been selected I display
>>a command link to add a child node.
>>
>>              <h:commandLink value="#{labels.add_pro} "
>>                      styleClass="document"
>>                      action="UpdateViewAction"
>>      
>>actionListener="#{treeBacker.createProArgumentationNode}">
>>                      <h:graphicImage
>value="images/ProNodeIcon.gif"
>>border="0" />
>>              </h:commandLink>
>>
>>Whenever I click add child node command
>>link, the getTreeData() is called 3 times, but with a 
>little "twist". This
>>is
>>how it goes:
>>
>>1st time:     getTreeData() gets called and returns the 
>already displayed
>>data
>>2nd time:     similar steps as in the 1st time.
>>====> the actionListener for the add child node command link
>gets called.
>>      The model is updated with the appropriate value.
>>3rd time:     getTreeData() gets called but this time it 
>gets the updated
>>      model value.
>>
>>Unfortunately, after the 3rd time that getTreeData() got
>called with the
>>updated
>>model value, the tree3 component displays only the previous 
>stored value.
>>Now, if I selected a node THEN the updated value (the added
>node) gets
>>displayed.
>>
>>My question is how can I make the tree3 component display
>the most recent
>>model data?
>>
>>Thanks
>>Edwin
>>p.s. I experience the same effect using the tree2 component
>instead of the
>>tree3.
>>
>>
>Dennis Byrne
>
>
>*************************************************************
********
>This message and any attachments are solely for the intended 
recipient. If you are not the intended recipient, disclosure, 
copying, use or distribution of the information included in 
this message is prohibited -- Please immediately and 
permanently delete.
>
Dennis Byrne

Reply via email to