Problema Jsf e Rich Faces Substituir o selectOneMenu por um TreeView

Ola tudo bem pessoal, eu sou novo aqui, nem tão novo, mas sempre acompanhei o fórum sem me manifestar, pois gosto das discussões(no bom sentido) que acontecem aqui e porque conheço alguns que freqüentam o fórum, amigos e até alguns que ja me deram aula rsrsr.

Eu tenho uma dúvida:

Me mandaram substituir o codigo de um selectOneMenu por um treeview do richfaces.
Mas daí vieram os problemas:

1- Eu consigo fazer os dados virem de forma correta para o treeview, mas não consigo setar esse valor para uma variavel no Beam, recebo um erro notificando que minha variavel é nula.Ou seja preciso selecionar um valor nó da treeview, clicar em um botão next, enviar em forma de objeto para uma variavel que esta no bean.

2- Estou usando o Jboss seam, é um projeto legado , nem em sonho posso mudar a estrutura do mesmo.

Abaixo vai o codigo do SelecteOneMenu:

<h:selectOneMenu id="unit" value="#{analiseHome.unit}" required="true">
       							<f:selectItems value="#{analiseHome.listaUnidades}"/>
       							<f:converter converterId="unitConverter" />
</h:selectOneMenu>
       						

Agora o codigo do beam “AnaliseHome”


@Name("analiseHome")
public class AnaliseHome extends EntityHome<AnaliseHome> {
.
    @In
    private Map<String, String> messages;

    @Logger
    protected Log log;

    private String graphicType;

   
    private Unidade unit;

    private Variavel variable;

    private List<SelectItem> opcoesGrafico;

    
    private String unitId;
    
    public void setUnitId(String unitId){
    	unitId = unitId;

    }
    
    public String getUnitId() {
		return unitId;
	}

	public Unidade getUnit() {
	
        return unit;
    }

    public void setUnit(Unidade unit) {
 
        this.unit = unit;
    }

    public List<Unidade> getParentUnits() {
        EntityManager em = getEntityManager();
    	return em.createNamedQuery("find_unidade_All_parent").getResultList();
    }
    
    
    public Variavel getVariable() {
        return variable;
    }

   
    public void setVariable(Variavel variable) {
        this.variable = variable;
    }

    public ArrayList<SelectItem> getListaUnidades() {
        ArrayList<SelectItem> retval = new ArrayList<SelectItem>();

        String cmd = "select u from Unidade u order by u.nome";

        EntityManager em = getEntityManager();
        List<Unidade> unidades = em.createQuery(cmd).getResultList();
        for (Unidade un : unidades) {
            retval.add(new SelectItem(un, un.toString()));
        }

        return retval;
    }

    public ArrayList<SelectItem> getListaVariaveis() {
        ArrayList<SelectItem> retval = new ArrayList<SelectItem>();

        Query q = null;
        // if(variable != null){
        // q = super.getEntityManager().createQuery("select v from Variavel v where
        // v.periodo.tipoMedDispersao=:tipo order by v.nome");
        // q.setParameter("tipo", variable.getPeriodo().getTipoMedDispersao());
        // }else{
        q = super.getEntityManager().createQuery("select v from Variavel v order by v.nome");
        // }

        List<Variavel> variaveis = q.getResultList();
        for (Variavel vr : variaveis) {
            retval.add(new SelectItem(vr, vr.toString()));
        }

        return retval;
    }

    public List<AnaliseSXBarra> getAnaliseSX() {
        Query q = super.getEntityManager().createQuery(BUSCA_ANALISES);
        q.setParameter("unid", this.unit.getId());
        q.setParameter("vari", this.variable.getId());
        q.setParameter("tipo", 1);
        List<AnaliseSXBarra> analise = q.getResultList();
        return analise;
    }

    public List<AnaliseRXBarra> getAnaliseRX() {
        Query q = super.getEntityManager().createQuery(BUSCA_ANALISES);
        q.setParameter("unid", this.unit.getId());
        q.setParameter("vari", this.variable.getId());
        q.setParameter("tipo", 2);
        List<AnaliseRXBarra> analise = q.getResultList();
        return analise;
    }

    public List<AnaliseRmXBarra> getAnaliseRmX() {
        Query q = super.getEntityManager().createQuery(BUSCA_ANALISES);
        q.setParameter("unid", this.unit.getId());
        q.setParameter("vari", this.variable.getId());
        q.setParameter("tipo", 5);
        List<AnaliseRmXBarra> analise = q.getResultList();
        return analise;
    }

    public List<AnaliseRmXmBarra> getAnaliseRXM() {
        Query q = super.getEntityManager().createQuery(BUSCA_ANALISES);
        q.setParameter("unid", this.unit.getId());
        q.setParameter("vari", this.variable.getId());
        q.setParameter("tipo", 6);
        List<AnaliseRmXmBarra> analise = q.getResultList();
        return analise;
    }

    public List<AnaliseParetto> getAnaliseParetto() {
        
    	
    	Query q = super.getEntityManager().createQuery(BUSCA_ANALISES);
        
    	
    	
        q.setParameter("unid", this.unit.getId());
        q.setParameter("vari", this.variable.getId());
        q.setParameter("tipo", 4);
        List<AnaliseParetto> analise = q.getResultList();
        
        
        return analise;
    }

    public String etapa2() {
        log.debug("Entrou em etapa2()...");

        log.debug("Unidade = " + unit);
        log.debug("Variável = " + variable);

        opcoesGrafico = new ArrayList<SelectItem>();

        if (variable.getPeriodo().getTipoMedDispersao() == MedidaDispersao.STDDEV) {
            opcoesGrafico.add(new SelectItem("" + MedidaDispersao.STDDEV, messages.get("spc_Analysis_Type_STDDEV")));
        }
        if (variable.getPeriodo().getTipoMedDispersao() == MedidaDispersao.RANGE) {
            opcoesGrafico.add(new SelectItem("" + MedidaDispersao.RANGE, messages.get("spc_Analysis_Type_RANGE")));
        }
        if (variable.getPeriodo().getTipoMedDispersao() == MedidaDispersao.SLIDINGRANGE) {
            opcoesGrafico.add(new SelectItem("" + MedidaDispersao.SLIDINGRANGE,
                                             messages.get("spc_Analysis_Type_SLIDINGRANGE")));
        }
        if (variable.getPeriodo().getTipoMedDispersao() == MedidaDispersao.SLIDINGRANGE_SLIDINGMEAN) {
            opcoesGrafico.add(new SelectItem("" + MedidaDispersao.SLIDINGRANGE_SLIDINGMEAN,
                                             messages.get("spc_Analysis_Type_SLIDINGRANGE_SLIDINGMEAN")));
        }
        opcoesGrafico.add(new SelectItem("" + MedidaDispersao.PARETO, messages.get("spc_Analysis_Type_PARETO")));

        return "/spc/analysis2.xhtml";
    }

    public String etapa3() {
        log.debug("Entrou em etapa3()...");

        log.debug("Unidade = " + unit);
        log.debug("Variável = " + variable);

        super.getApplicationContext().set("unidade", unit);
        super.getApplicationContext().set("variavel", variable);

        String proximaPagina = null;
        if (graphicType.equals("" + MedidaDispersao.STDDEV)) {
            proximaPagina = "/spc/analysisSxBarList.xhtml";
        }
        if (graphicType.equals("" + MedidaDispersao.RANGE)) {
            proximaPagina = "/spc/analysisRxBarList.xhtml";
        }
        if (graphicType.equals("" + MedidaDispersao.SLIDINGRANGE)) {
            proximaPagina = "/spc/analysisRxmBarList.xhtml";
        }
        if (graphicType.equals("" + MedidaDispersao.SLIDINGRANGE_SLIDINGMEAN)) {
            proximaPagina = "/spc/analysisRmxBarList.xhtml";
        }
        if (graphicType.equals("" + MedidaDispersao.PARETO)) {
            proximaPagina = "/spc/analysisParetoList.xhtml";
        }

        log.debug("Próxima página = " + proximaPagina);

        return proximaPagina;
    }

    public List<SelectItem> getOpcoesGrafico() {
        return opcoesGrafico;
    }

    public void setOpcoesGrafico(List<SelectItem> opcoesGrafico) {
        this.opcoesGrafico = opcoesGrafico;
    }

    public String getGraphicType() {
        return graphicType;
    }

    public void setGraphicType(String graphicType) {
        this.graphicType = graphicType;
    }

  
}

Agora o codigo da tree View

<rich:tree id="treeView" style="width:300px;margin-left:50px;" switchType="ajax" >
	<rich:recursiveTreeNodesAdaptor   roots="#{analiseHome.parentUnits}" var="item" nodes="#{item.subUnidades}">
		<rich:treeNode selectedClass="selectedTree"   ajaxSingle="true" ajaxSubmitSelection="true">
									
		</rich:treeNode>
	</rich:recursiveTreeNodesAdaptor>
</rich:tree>

Obrigado aos que puderem me ajudar…