2011-06-15 5 views
2

J'utilise PrimeFaces 2.2.1 Composant Tree sur Glassfish 3.1PrimeFaces sélection des arbres est nul

Je suis en train de définir le nœud sélectionné sur l'arbre à un objet TreeNode dans mon grain de soutien, mais il est toujours nulle.

J'ai demandé de l'aide sur le forum PrimeFaces, mais je n'ai malheureusement pas reçu de réponse.

<p:tree id="contextTree" value="#{contextTreeBean.contextRoot}" var="node" selectionMode="single" selection="#{contextTreeBean.selectedNode}"> 
     <p:treeNode> 
      <h:outputText value="#{node.name}"/> 
     </p:treeNode> 
    </p:tree> 
    <h:outputText id="output" value="#{contextTreeBean.output}"/> 
    <p:commandButton id ="createButton" value="+" actionListener="#{contextTreeBean.createContext()}" update="contextTree, output"/> 


@ManagedBean 
@RequestScoped 
public class contextTreeBean { 

    @EJB 
    private ContextFacadeLocal contextFacade; 
    private Context context = new Context(); 
    private TreeNode contextRoot; 
    private TreeNode selectedNode; 
    private String output; 

    /** Creates a new instance of contextTreeBean */ 
    public contextTreeBean() { 
    } 

    public void createContext() { 
     output = selectedNode.getData().toString(); 
    } 

    public String getOutput() { 
     return output; 
    } 

    public void setOutput(String output) { 
     this.output = output; 
    } 

    public TreeNode getSelectedNode() { 
     return selectedNode; 
    } 

    public void setSelectedNode(TreeNode selectedNode) { 
     this.selectedNode = selectedNode; 
    } 

    public Context getContext() { 
     return context; 
    } 

    public void setContext(Context context) { 
     this.context = context; 
    } 

    public ContextFacadeLocal getContextFacade() { 
     return contextFacade; 
    } 

    public void setContextFacade(ContextFacadeLocal contextFacade) { 
     this.contextFacade = contextFacade; 
    } 

    public TreeNode getContextRoot() { 
     return contextRoot; 
    } 

    public void setContextRoot(TreeNode contextRoot) { 
     this.contextRoot = contextRoot; 
    } 

    @PostConstruct 
    private void postConstruct() { 
     populateContextTree(); 
    } 

    private void populateContextTree() { 
     buildContextTree(new DefaultTreeNode("Root", null), contextFacade.findRootContexts()); 
    } 

    private void buildContextTree(TreeNode parentNode, List<Context> children) { 
     for (Context currentContextNode : children) { 
      TreeNode tempNode = new DefaultTreeNode(currentContextNode, parentNode); 
      buildContextTree(tempNode, currentContextNode.getChildren()); 
     } 
     contextRoot = parentNode; 
    } 
} 
+1

Cela fonctionne-t-il si vous modifiez le bean pour afficher la portée ou la portée de la session? –

Répondre

2

Avez-vous essayé si selectedNode est en train de vérifier en vous connectant null? Peut-être est-il en train de se régler mais l'attribut update de votre <p:commandButton> n'est pas réglé correctement. Rappelez-vous que par défaut, le <h:form> ajoutera son identifiant aux éléments enfants.

Vérifiez aussi qu'il n'y a pas d'erreurs de validation étant lancées par d'autres éléments dans le <h:form>

Plus encore, je ne crois pas qu'un composant d'arbre Primefaces fonctionnera correctement quand il est soutenu par un bean géré @RequestScoped. Essayez de remplacer le bean géré par @ViewScoped afin que le cycle de vie du bean géré couvre toutes les demandes individuelles.

+0

J'ai eu le composant Tree dans un client modèle JSF avec le formulaire dans le modèle. Déplacer le formulaire dans la page du client a fonctionné. J'ai été en mesure de garder le support de demande RequestScoped. Devrait-on toujours avoir des composants de formulaire dans le client modèle? – retrodev

+0

@Laurence, Oui, vous trouverez généralement que chaque page client doit avoir au moins un formulaire. En outre, vous pouvez rencontrer des bogues Primefaces où vous avez besoin de plus d'un formulaire. Un exemple est que si vous avez plusieurs composants de dialogue sur une seule page, il est préférable de mettre le contenu de chaque boîte de dialogue sous une forme séparée. –

0

J'ai eu le composant Tree dans un client modèle JSF avec le formulaire dans le modèle. Déplacer le formulaire dans la page du client a fonctionné. J'ai été en mesure de garder le support de demande RequestScoped.

+0

Donc, vous étiez essentiellement des formulaires de nidification? – BalusC

+0

J'avais un formulaire dans le modèle, mais pas le client modèle. Je pensais que le formulaire serait exposé à la page client, mais apparemment pas. – retrodev