Richfaces 4.3.1 Final <rich:tree> getRowData() is null . Rest attributes are populating fine.
ashu17 Sep 20, 2013 2:33 AMI have used AuditTreeNode and extended TreeNodeImpl to iterate tree. But rowData is null in backing bean.So I am not able to get name of selected node/leaf. Here is code snippet
=================AuditTreeNode=======================
import java.util.Enumeration;
import javax.swing.tree.TreeNode;
import org.richfaces.model.TreeNodeImpl;
public class AuditTreeNode extends TreeNodeImpl {
private String name;
private AuditTreeNode rowData;
private boolean lastnode;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return this.name;
}
public Enumeration children() {
// TODO Auto-generated method stub
return null;
}
public boolean getAllowsChildren() {
// TODO Auto-generated method stub
return false;
}
public TreeNode getChildAt(int arg0) {
// TODO Auto-generated method stub
return null;
}
public int getChildCount() {
// TODO Auto-generated method stub
return 0;
}
public int getIndex(TreeNode arg0) {
// TODO Auto-generated method stub
return 0;
}
public TreeNode getParent() {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean isLeaf() {
// TODO Auto-generated method stub
return this.lastnode;
}
public void setLastnode(boolean lastnode) {
this.lastnode = lastnode;
}
public AuditTreeNode getRowData() {
return rowData;
}
public void setRowData(AuditTreeNode rowData) {
this.rowData = rowData;
}
}
============================================
==========Backing Bean ==============
//method called after selection is made
public void processSelection(TreeSelectionChangeEvent event)
throws AbortProcessingException {
UITree tree = (UITree) event.getComponent();
this.auditType = tree.getRowData().toString();
.............
.............
selectedNodeChildren.clear();
}
//Method to populate tree object
private AuditTreeNode populateAuditTypeTree() {
final String _methodName = "populateAuditTypeTree";
if (Log.ON) {
log.entering(CLASS_NAME, _methodName);
}
this.auditTypeTree = new AuditTreeNode();
int counter = 0;
if (auditTypeVOLst != null)
for (AuditTypeVO auditTypeDTO : auditTypeVOLst) {
if (auditTypeDTO.getParentId() == null
|| auditTypeDTO.getParentId() == 0) {
AuditTreeNode rootNodes = new AuditTreeNode();
rootNodes.setName(auditTypeDTO.getName());
this.auditTypeTree.addChild(counter, rootNodes);
counter++;
// To process child nodes
fetchAuditTypeChildrens(auditTypeDTO.getIdPk(),
auditTypeVOLst, rootNodes);
}
}
if (Log.ON) {
log.exiting(CLASS_NAME, _methodName);
}
return auditTypeTree;
}
private void fetchAuditTypeChildrens(long idPk,
List<AuditTypeVO> auditTypeList, AuditTreeNode rootNodes) {
int i = 0;
for (AuditTypeVO auditTypeDTO : auditTypeVOLst) {
if (auditTypeDTO.getParentId() != null
&& idPk == auditTypeDTO.getParentId()) {
AuditTreeNode child = new AuditTreeNode();
child.setName(auditTypeDTO.getName());
rootNodes.setLastnode(false);
rootNodes.addChild(i, child);
i++;
fetchAuditTypeChildrens(auditTypeDTO.getIdPk(), auditTypeVOLst,
child);
} else {
rootNodes.setLastnode(true);
}
}
==============================
============UI==================
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:c="http://java.sun.com/jstl/core">
<rich:popupPanel id="auditTypeTree" resizeable="false" height="420" header="Audit Type" autosized="true"
width="400" styleClass="customModalClass">
<f:facet name="controls">
<h:graphicImage value="/images/ico_close.gif"
onclick="#{rich:component('auditTypeTree')}.hide();"
style="cursor:pointer;cursor:hand">
</h:graphicImage>
</f:facet>
<h:form>
<a4j:region>
<rich:tree value="#{auditBean.auditTypeTree}" var="item" rendered="#{auditBean.auditPlanningEditable}"
id="auditTypeTree2" render="auditType,auditClassificationTree,classificationId"
toggleType="client" selectionType="ajax" rowKeyConverter="org.richfaces.IntegerSequenceRowKeyConverter"
onselectionchange="#{rich:component('auditTypeTree')}.hide();">
<rich:treeSelectionChangeListener listener="#{auditBean.processSelection}"/>
<rich:treeNode>
<h:outputText value="#{item}" />
</rich:treeNode>
</rich:tree>
</a4j:region>
</h:form>
</rich:popupPanel>
</ui:composition>
========================
-
Screen-Shot.png 14.0 KB