Bonjour,
J'utilise RichFaces 3.3.3, et mon client est un Firefox 3.0.x (pas le choix).
J'ai désespérément tenté de créer un arbre (jusque là, ok) dynamique (et là pas ok).
Par exmple je veux supprimer des noeuds (menu contextuel sur click gauche) et mettre à jour un compteur de feuilles. Je pass ebien dans mes action (ou actionListener) mais après de multiples tentatives, je me suis rendu compte que c'est le reRender qui foire : voici l'erreur dans la console js de FF :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Error: not well-formed
Source File: http://localhost:8280/myapp/test.jsf
Line: 12, Column: 25
Source Code:
if (!params.ajaxSingle && event.ajaxSingle) {
J'ai fait un arbre de test tout simple.
Je suis à cours d'idées pour tenter de contourner ce pb .

Voici des extrait du code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<a4j:form>
    <rich:tree id="testTree" swichType="client" >
        <rich:recursiveTreeNodesAdaptor 
                roots="#{myBBean.testRootNodes}" var="node" 
                nodes="#{node.children}">
            <rich:treeNode data="#{node.id}">
                <h:outputText value="#{node.label}"/>
                <rich:spacer width="3px"/>
                <h:outputText id="compteur" value="#{myBBean.debugClickCount}" />
                <a4j:commandLink action="#{myBBean.doClick}" reRender="testTree" >
                click me
                </a4j:commandLink>
            </rich:treeNode>
        </rich:recursiveTreeNodesAdaptor>
    </rich:tree>
    </a4j:form>
les classes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
public class TestNode
	{
		private String id;
		private String label;
		private List<TestNode> children;
		private TestNode parent;
...get/setters
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class MyBean
{
...
private TreeNode[] testRootNodes;
private int debugClickCount = 0;
//+get/set
public void doClick(){debugClickCount ++;}
...
private void builtTestTree()
	{
		this.testRootNodes = new TestNode[1];
		TestNode rootNode = new TestNode();
		rootNode.setId("1");
		rootNode.setLabel("NODE id "+rootNode.getId());
 
		List<TestNode> children = new ArrayList<TestNode>();
		TestNode child01 = new TestNode();
		child01.setId("1:01");
		child01.setLabel("child "+child01.getId());
		child01.setParent(rootNode);
		children.add(child01);
		TestNode child02 = new TestNode();
		child02.setId("1:02");
		child02.setLabel("child "+child02.getId());
		child02.setParent(rootNode);
		children.add(child02);
		rootNode.setChildren(children);
		testRootNodes[0]=rootNode;
	}
Et je dis que c'est le rerender du tree qui foire, car si dans reRender je met un autre composant, je n'ai pas d'erreur dans la console (mais bon, mon tree n'as rafraichit .. ce que je cherche à faire tout de même !!).