Problem with tree in richfaces 3.3 final
ouss07 Aug 23, 2011 5:46 AMHi everybody,i really need help,i cant deal with my tree and get data from it,i had an exception:
javax.servlet.ServletException: java.lang.IllegalStateException: No tree element available or row key not set!
i know the cause of the exception but i didnt find any explan so the solution;in fact when i debbug it crash in the preparecreateGarantie method,
the cant get object from the tree uiTree
here the code where it crash:
public String prepareCreateGarantie() {
// System.out.println("DossierNodeType:"+dossierNode.getType());
// FIXME find parent node
DossierNode parent = (DossierNode) uiTree.getTreeNode().getParent()
.getData();
IServiceCreanceElementaire sce = (IServiceCreanceElementaire) FacesContext
.getCurrentInstance()
.getApplication()
.getELResolver()
.getValue(FacesContext.getCurrentInstance().getELContext(),
null, "serviceCreanceElementaire");
CreanceElementaire ce = (CreanceElementaire) sce.find(Integer
.valueOf(parent.getId()));
GarantieController garantieController = (GarantieController) FacesContext
.getCurrentInstance()
.getApplication()
.getELResolver()
.getValue(FacesContext.getCurrentInstance().getELContext(),
null, "garantieController");
garantieController.prepareCreate(ce);
return null;
}
//********************///////
here my code JSF:
<rich:tree binding="#{dossierController.uiTree}" nodeSelectListener="#{dossierController.processSelection}"
reRender="selectedNode" ajaxSubmitSelection="true" switchType="client"
value="#{dossierController.treeNode}" var="item" ajaxKeys="#{null}" nodeFace="#{item.type}"
selectedClass="treeClassSelected"
rowKeyVar="rowKey">
<rich:treeNode nodeClass="#{item.selected?'treeClassSelected':''}" type="creance" icon="/images/icons/dossier/creance.png" iconExpanded="/images/icons/dossier/creance.png" iconLeaf="/images/icons/dossier/creance.png" iconCollapsed="/images/icons/dossier/creance.png">
<ui:include src="/xhtmlFile/dossier/treeTitle.xhtml"/>
</rich:treeNode>
<rich:treeNode nodeClass="#{item.selected?'treeClassSelected':''}" type="chronologie" icon="/images/icons/dossier/chronologie.png" iconLeaf="/images/icons/dossier/chronologie.png">
<ui:include src="/xhtmlFile/dossier/treeTitle.xhtml"/>
</rich:treeNode>
<rich:treeNode nodeClass="#{item.selected?'treeClassSelected':''}" type="relation" icon="/images/icons/dossier/relation.png" iconExpanded="/images/icons/dossier/relation.png" iconLeaf="/images/icons/dossier/relation.png" iconCollapsed="/images/icons/dossier/relation.png">
<ui:include src="/xhtmlFile/dossier/treeTitle.xhtml"/>
</rich:treeNode>
<rich:treeNode nodeClass="#{item.selected?'treeClassSelected':''}" type="contrat" icon="/images/icons/dossier/contrat.png">
<ui:include src="/xhtmlFile/dossier/treeTitle.xhtml"/>
</rich:treeNode>
<rich:treeNode nodeClass="#{item.selected?'treeClassSelected':''}" type="jugement" icon="/images/icons/dossier/jugement.png">
<ui:include src="/xhtmlFile/dossier/treeTitle.xhtml"/>
</rich:treeNode>
<rich:treeNode nodeClass="#{item.selected?'treeClassSelected':''}" type="operation" icon="/images/icons/dossier/operation.png">
<ui:include src="/xhtmlFile/dossier/treeTitle.xhtml"/>
</rich:treeNode>
<rich:treeNode nodeClass="#{item.selected?'treeClassSelected':''}" type="garantieEtat" icon="/images/icons/dossier/garantie_etat1.png">
<ui:include src="/xhtmlFile/dossier/treeTitle.xhtml"/>
</rich:treeNode>
<rich:treeNode nodeClass="#{item.selected?'treeClassSelected':''}" type="garantieReelle" icon="/images/icons/dossier/garantie.png">
<ui:include src="/xhtmlFile/dossier/treeTitle.xhtml"/>
</rich:treeNode>
<rich:treeNode nodeClass="#{item.selected?'treeClassSelected':''}" type="prestation" icon="/images/icons/dossier/prestation.png" iconLeaf="/images/icons/dossier/prestation.png">
<ui:include src="/xhtmlFile/dossier/treeTitle.xhtml"/>
</rich:treeNode>
<rich:treeNode nodeClass="#{item.selected?'treeClassSelected':''}" type="caution" icon="/images/icons/dossier/caution.png" iconLeaf="/images/icons/dossier/caution.png">
<ui:include src="/xhtmlFile/dossier/treeTitle.xhtml"/>
</rich:treeNode>
<rich:treeNode nodeClass="#{item.selected?'treeClassSelected':''}" type="restructuration" icon="/images/icons/dossier/restructuration.png" iconLeaf="/images/icons/dossier/restructuration.png">
<ui:include src="/xhtmlFile/dossier/treeTitle.xhtml"/>
</rich:treeNode>
<rich:treeNode id="listOperationRecouvrementNode" nodeClass="#{item.selected?'treeClassSelected':''}" type="listOperationRecouvrement">
<ui:include src="/xhtmlFile/dossier/treeTitle.xhtml"/>
<rich:contextMenu event="oncontextmenu" attachTo="listOperationRecouvrementNode" submitMode="none">
<rich:menuItem value="#{msgs2.action_add} opération de recouvrement" onclick="#{rich:component('mpAddPrestation')}.show()"/>
</rich:contextMenu>
</rich:treeNode>
<rich:treeNode nodeClass="#{item.selected?'treeClassSelected':''}" type="dossier">
<ui:include src="/xhtmlFile/dossier/treeTitle.xhtml"/>
</rich:treeNode>
<rich:treeNode id="listJugementNode" nodeClass="#{item.selected?'treeClassSelected':''}" type="listJugement">
<ui:include src="/xhtmlFile/dossier/treeTitle.xhtml"/>
<rich:contextMenu event="oncontextmenu" attachTo="listJugementNode" submitMode="ajax" >
<rich:menuItem ajaxSingle="true" value="#{msgs2.action_add} Jugement" onclick="#{rich:component('mpAddJugement')}.show()" action="#{dossierController.prepareCreateJugement}" reRender="addJugementGroup"/>
</rich:contextMenu>
</rich:treeNode>
<rich:treeNode id="listPrestationNode" nodeClass="#{item.selected?'treeClassSelected':''}" type="listPrestations">
<ui:include src="/xhtmlFile/dossier/treeTitle.xhtml"/>
<rich:contextMenu event="oncontextmenu" attachTo="listPrestationNode" submitMode="ajax">
<rich:menuItem ajaxSingle="true" value="#{msgs2.action_add} prestation" onclick="#{rich:component('mpAddPrestation')}.show()" action="#{dossierController.prepareCreateMission}" reRender="addJugementGroup"/>
</rich:contextMenu>
</rich:treeNode>
<rich:treeNode id="listOperationNode" nodeClass="#{item.selected?'treeClassSelected':''}" type="listOperation">
<ui:include src="/xhtmlFile/dossier/treeTitle.xhtml"/>
<rich:contextMenu event="oncontextmenu" attachTo="listOperationNode" submitMode="ajax">
<rich:menuItem ajaxSingle="true" value="#{msgs2.action_add} Operation" onclick="#{rich:component('mpAddOperation')}.show()" action="#{creanceElementaireController.prepareCreateOperation}" reRender="addOperationGroup">
</rich:menuItem>
</rich:contextMenu>
</rich:treeNode>
<!-- FIXME add contrat -->
<rich:treeNode id="listContratNode" nodeClass="#{item.selected?'treeClassSelected':''}" type="listContrat">
<ui:include src="/xhtmlFile/dossier/treeTitle.xhtml"/>
<rich:contextMenu event="oncontextmenu" attachTo="listContratNode" submitMode="ajax">
<rich:menuItem ajaxSingle="true" value="#{msgs2.action_add} Operation" onclick="#{rich:component('mpAddContrat')}.show()" action="#{creanceElementaireController.prepareCreateContrat}" reRender="addContratGroup"/>
</rich:contextMenu>
</rich:treeNode>
<rich:treeNode id="listCautionNode" nodeClass="#{item.selected?'treeClassSelected':''}" type="listCautions">
<ui:include src="/xhtmlFile/dossier/treeTitle.xhtml"/>
<rich:contextMenu event="oncontextmenu" attachTo="listCautionNode" submitMode="ajax" >
<rich:menuItem value="#{msgs2.action_add} caution" onclick="#{rich:component('mpAddCaution')}.show()" action="#{dossierController.prepareCreateGarantie}" reRender="addCautionGroup"/>
</rich:contextMenu>
</rich:treeNode>
<rich:treeNode id="listGarantieReelleNode" nodeClass="#{item.selected?'treeClassSelected':''}" type="listGarantieReelles">
<ui:include src="/xhtmlFile/dossier/treeTitle.xhtml"/>
<rich:contextMenu event="oncontextmenu" attachTo="listGarantieReelleNode" submitMode="ajax">
<rich:menuItem value="#{msgs2.action_add} garantie réelle" onclick="#{rich:component('mpAddGarantieReelle')}.show()" action="#{dossierController.prepareCreateGarantie}" reRender="addGarantieReelleGroup"/>
</rich:contextMenu>
</rich:treeNode>
<rich:treeNode id="listGarantieEtatNode" nodeClass="#{item.selected?'treeClassSelected':''}" type="listGarantieEtats">
<ui:include src="/xhtmlFile/dossier/treeTitle.xhtml"/>
<rich:contextMenu event="oncontextmenu" attachTo="listGarantieEtatNode" submitMode="ajax">
<rich:menuItem value="#{msgs2.action_add} garantie de l'état" onclick="#{rich:component('mpAddGarantieEtat')}.show()" action="#{dossierController.prepareCreateGarantie}" reRender="addGarantieEtatGroup"/>
</rich:contextMenu>
</rich:treeNode>
</rich:tree>
my code java :
public void load tree ()
{
// (re)load all data
rootNode = new TreeNodeImpl<DossierNode>();
// allNodes=new HashSet<TreeNode<DossierNode>>();
allNodes = new ArrayList<TreeNode<DossierNode>>();
rootNode.setData(new DossierNode("", "root", ""));
allNodes.add(rootNode);
// Dossier
// TreeNodeImpl dossierNode = new TreeNodeImpl<DossierNode>();
// dossierNode.setData(new
// DossierNode("Dossier","dossier","8784548754"));
// rootNode.addChild(new Integer(1), dossierNode);
int counter = 1;
// allNodes.add(dossierNode);
// créance
TreeNodeImpl creanceNode = new TreeNodeImpl<DossierNode>();
DossierNode dn = new DossierNode("Créance", "creance", "878454");
creanceNode.setData(dn);
// if(dossierNode==null)dn.setSelected(true);
rootNode.addChild(new Integer(counter), creanceNode);
counter++;
allNodes.add(creanceNode);
// restructuration
/*
* TreeNodeImpl restructurationNode = new TreeNodeImpl<DossierNode>();
* restructurationNode.setData(new
* DossierNode("Restructuration","restructuration","95658"));
* dossierNode.addChild(new Integer(counter), restructurationNode);
* counter++; allNodes.add(restructurationNode);
*/
// chronologie
TreeNodeImpl chronologieNode = new TreeNodeImpl<DossierNode>();
chronologieNode.setData(new
DossierNode("Chronologie","chronologie","9853215"));
rootNode.addChild(new Integer(counter), chronologieNode); counter++;
allNodes.add(chronologieNode);
// relation
TreeNodeImpl relationNode = new TreeNodeImpl<DossierNode>();
relationNode.setData(new DossierNode("Relation", "relation", "5895665"));
rootNode.addChild(new Integer(counter), relationNode);
counter++;
allNodes.add(relationNode);
/*
* //opérations de recouvrements TreeNodeImpl
* listOperationRecouvrementNode = new TreeNodeImpl<DossierNode>();
* listOperationRecouvrementNode.setData(new
* DossierNode("Opérations de recouvrements"
* ,"listOperationRecouvrement","")); rootNode.addChild(new
* Integer(counter), listOperationRecouvrementNode); counter++;
* addOperationRecouvrement(listOperationRecouvrementNode);
* allNodes.add(listOperationRecouvrementNode);
*/
// Liste des jugements
/* TreeNodeImpl listJugementNode = new TreeNodeImpl<DossierNode>();
listJugementNode.setData(new
DossierNode("Jugements","listJugement","878454"));
rootNode.addChild(new Integer(counter), listJugementNode);
addJugements(listJugementNode); counter++;
allNodes.add(listJugementNode);*/
// Liste des contrats
TreeNodeImpl listContratNode = new TreeNodeImpl<DossierNode>();
listContratNode.setData(new DossierNode("Contrats", "listContrat","878454"));
rootNode.addChild(new Integer(counter), listContratNode);
addContrats(listContratNode);
counter++;
allNodes.add(listContratNode);
// Liste des opérations
TreeNodeImpl listOperationNode = new TreeNodeImpl<DossierNode>();
listOperationNode.setData(new DossierNode("Opérations",
"listOperation", "878454"));
rootNode.addChild(new Integer(counter), listOperationNode);
addOperations(listOperationNode);
counter++;
allNodes.add(listOperationNode);
}
///****************************************************************///
public void processselection(NodeSelectedEvent event)
{
// TODO Working copy
HtmlTree tree = (HtmlTree) event.getComponent();
previousSelectedDossierNode = dossierNode;
dossierNode = (DossierNode) tree.getRowData();
dossierNode.setSelected(true);
// XXX nodeTitle = dossierNode.getTitle();
// System.out.println("Original selected state:"+((DossierNode)
// tree.getRowData()).isSelected());
if (previousSelectedDossierNode != null) {
// double select problem
if (previousSelectedDossierNode != dossierNode) {
previousSelectedDossierNode.setSelected(false);
}
}
if (dossierNode.type.equals("listGarantieReelles")) {
System.out.println("processSelection---dossierNode.type.equals(listGarantieReelles)");
if(creanceIdentifiant != null)
{
prepareViewGarantieReelleList();
}
}
if (dossierNode.type.equals("listCautions")) {
System.out.println("processSelection---dossierNode.type.equals(listCautions)");
//prepareViewGarantiePersonnelleList();
}
if (dossierNode.type.equals("listGarantieEtats")) {
System.out.println("processSelection---dossierNode.type.equals(listGarantieEtats)");
if(creanceIdentifiant != null)
{
prepareViewGarantieDEtatList();
}
}
if (dossierNode.type.equals("listJugement")) {
System.out.println("processSelection---dossierNode.type.equals(listJugement)");
if(creanceIdentifiant != null)
{
prepareViewJugementList();
}
}
if (dossierNode.type.equals("listPrestations")) {
System.out.println("processSelection---dossierNode.type.equals(listPrestations)");
// prepareViewPrestationsList();
}
if (dossierNode.type.equals("listContrat")) {
System.out.println("openNode---dossierNode.type.equals(listContrat)");
}
if (dossierNode.type.equals("listOperation")) {
System.out.println("openNode---dossierNode.type.equals(listOperation)");
}
if (dossierNode.type.equals("contrat")) {
System.out.println("processSelection---dossierNode.type.equals(contrat)");
creanceIdentifiant=Integer.valueOf(dossierNode.id);
prepareViewContrat(Integer.valueOf(dossierNode.id));
} else
if (dossierNode.type.equals("garantieReelle")
|| dossierNode.type.equals("garantieEtat")
|| dossierNode.type.equals("caution")) {
if (dossierNode.type.equals("garantieEtat"))
{
System.out.println("processSelection---dossierNode.type.equals(garantieEtat)");
// prepareViewPrestationsListForParent();
prepareViewGarantieDEtat(Integer.valueOf(dossierNode.id));
}
if (dossierNode.type.equals("caution"))
{
System.out.println("processSelection---dossierNode.type.equals(caution)");
prepareViewGarantie(Integer.valueOf(dossierNode.id));
}
if (dossierNode.type.equals("garantieReelle"))
{
System.out.println("processSelection---dossierNode.type.equals(garantieReelle)");
//prepareViewPrestationsListForParent();
prepareViewGarantie(Integer.valueOf(dossierNode.id));
}
} else if (dossierNode.type.equals("operation")) {
prepareViewOperation(Integer.valueOf(dossierNode.id));
} else if (dossierNode.type.equals("relation")) {
prepareViewRelation(Integer.valueOf(getCurrentRelation().getIdentifiant()));
}
else if (dossierNode.type.equals("jugement")) {
//prepareViewPrestationsListForParent();
prepareViewJugement(Integer.valueOf(dossierNode.id));
}
else if (dossierNode.type.equals("prestation")) {
prepareViewMission(Integer.valueOf(dossierNode.id));
}
// XXX
/*
* HtmlTree tree = (HtmlTree)event.getComponent(); Object rowKey =
* tree.getRowKey(); TreeNode selectedNode =
* tree.getModelTreeNode(rowKey); selectedNodes.put(rowKey,
* selectedNode); for (Object curRowKey : selectedNodes.keySet()) {
* System.out.println("Selected node : " +
* selectedNodes.get(curRowKey).getData()); }
*/
/*
* clear this: liveDemo selectedNodeChildren.clear(); TreeNode
* currentNode = tree.getModelTreeNode(tree.getRowKey()); if
* (currentNode.isLeaf()){
* selectedNodeChildren.add((String)currentNode.getData()); }else {
* Iterator<Map.Entry<Object, TreeNode>> it = currentNode.getChildren();
* while (it!=null &&it.hasNext()) { Map.Entry<Object, TreeNode> entry =
* it.next();
* selectedNodeChildren.add(entry.getValue().getData().toString()); } }
*/
}
i hope that you help me and thank you anyway