[RESOLVIDO]Problema com cascata de objetos com Rich Faces e JSF

galera, to com um problema, tenho um ManagedBean que tem objetos dentro dele, na tela xhtml tem um rich:select mas quando tento popular meu bean com a cascata de objetos ele me retorna que o “a propriedade não pode ser alcançada”, vai o codigo.

[code]<h:form>
rich:panel
<h:panelGrid columns=“2”>
<h:outputLabel value=“Servidores " for=“list-servidores”/>
<rich:select id=“list-servidores” value=”#{regra.servidorBean.id_servidor}">
<f:selectItems value="#{servidor.listaServidores}" var=“serv” itemLabel="#{serv.nome}" itemValue="#{serv.id_servidor}"/>
</rich:select>
<h:outputLabel value=“Metodos” for=“list-metodos”/>
<rich:select id=“list-metodos” value="#{regra.metodoBean.id_metodo}">
<f:selectItems value="#{metodo.listarMetodos}" var=“met” itemLabel="#{met.ds_metodo}" itemValue="#{met.id_metodo}"/>
</rich:select>
<h:commandButton value=“Cadastrar” action="#{regra.inserir}"/>
</h:panelGrid>
</rich:panel>
</h:form>

[/code]

package br.com.brb.trx.controller;

import javax.faces.bean.ManagedBean;

import br.com.brb.trx.bean.MetodoBean;
import br.com.brb.trx.bean.ServidorBean;
@ManagedBean(name="regra")
public class RegraController {

	private ServidorBean servidorBean;
	private MetodoBean metodoBean;
	
	public ServidorBean getServidorBean() {
		return servidorBean;
	}

	public void setServidorBean(ServidorBean servidorBean) {
		this.servidorBean = servidorBean;
	}

	public MetodoBean getMetodoBean() {
		return metodoBean;
	}

	public void setMetodoBean(MetodoBean metodoBean) {
		this.metodoBean = metodoBean;
	}

	public String inserir(){
		System.out.println(metodoBean.getId_metodo());
		System.out.println(servidorBean.getId_servidor());
		return "index";
	}
}

É difícil para você usar a tag [code]?

é a primeira vez que posto aki no GUJ ainda estou me familiarizando!!! hehehe

Veja as seguintes linhas:

<f:selectItems value="#{servidor.listaServidores}" var="serv" itemLabel="#{serv.nome}" itemValue="#{serv.id_servidor}"/>
<f:selectItems value="#{metodo.listarMetodos}" var="met" itemLabel="#{met.ds_metodo}" itemValue="#{met.id_metodo}"/>

Cadê os atributos listaServidores e listarMetodos? Sua controller tem que ter essas duas listas e seus respectivos getters (não precisa dos setters).

Tenho que ter as listas no meu Managed bean mesmo eles estando em outros Managed Beans???

package br.com.brb.trx.controller;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import br.com.brb.trx.bean.MetodoBean;
import br.com.brb.trx.dao.MetodoDao;

@ManagedBean(name="metodo")
public class MetodoController {
	
	private long id_metodo;
	private String ds_metodo;
	private DataModel<MetodoBean> listaMetodos;
	
	public DataModel<MetodoBean> getListarMetodos(){
		List<MetodoBean> lista = new MetodoDao().listar();
		listaMetodos = new ListDataModel<MetodoBean>(lista);
		return listaMetodos;
	}
	public long getId_metodo() {
		return id_metodo;
	}

	public void setId_metodo(long id_metodo) {
		this.id_metodo = id_metodo;
	}

	public String getDs_metodo() {
		return ds_metodo;
	}

	public void setDs_metodo(String ds_metodo) {
		this.ds_metodo = ds_metodo;
	}

	public String inserir(){
		MetodoDao dao = new MetodoDao();
		MetodoBean metodo= new MetodoBean();
		
		metodo.setDs_metodo(getDs_metodo());
		dao.inserirMetodo(metodo);
		return "inserir";
	}
	public String remover(){
		MetodoBean metodo = (MetodoBean)(listaMetodos.getRowData());
		MetodoDao dao = new MetodoDao();
		dao.removerMetodo(metodo);
		
		return "excluir";
	}

}
[code]
package br.com.brb.trx.controller;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import br.com.brb.trx.bean.ServidorBean;
import br.com.brb.trx.dao.ServidorDao;

@ManagedBean(name="servidor")
public class ServidorController {

	private long id_servidor;
	private String nome;
	private DataModel<ServidorBean> listaServidores;
	
	public DataModel<ServidorBean> getListaServidores(){
		List<ServidorBean> lista = new ServidorDao().listar();
		listaServidores = new ListDataModel<ServidorBean>(lista);
		return listaServidores;
	}
	public long getId_servidor() {
		return id_servidor;
	}
	
	public void setId_servidor(long id_servidor) {
		this.id_servidor = id_servidor;
	}
	
	public String getNome() {
		return nome;
	}
	
	public void setNome(String nome) {
		this.nome = nome;
	}

	public String gravarServidor(){
		ServidorBean servidorBean = new ServidorBean();
		ServidorDao servidorDao = new ServidorDao();
		
		servidorBean.setNome(getNome());
		servidorDao.gravarServidor(servidorBean);
		
		return "inserir";
	}
	public String excluirServidor(){
		ServidorBean servidorBean = (ServidorBean)(listaServidores.getRowData());
		ServidorDao servidorDao = new ServidorDao();
		
		servidorDao.deletarServidor(servidorBean);
		
		return "excluir";
	}
	public ServidorBean recuperarServidorPorId(){
		ServidorBean servidorBean = new ServidorDao().recuperarServidor(getId_servidor());
		
		return servidorBean;
	}
}

[/code]

Hm. Desculpe. Falha minha. Eu li seu código e supus que todos liam de RegraController. Dessa forma que você fez está correto. Tem como colocar o stack trace completo?

An Error Occurred:
/cadastra_regra.xhtml @20,81 value="#{regra.servidorBean.id_servidor}": Target Unreachable, 'servidorBean' returned null
+- Stack Trace
javax.el.PropertyNotFoundException: /cadastra_regra.xhtml @20,81 value="#{regra.servidorBean.id_servidor}": Target Unreachable, 'servidorBean' returned null
	at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100)
	at org.richfaces.component.util.InputUtils.findConverter(InputUtils.java:123)
	at org.richfaces.component.util.InputUtils$1.getConverterByProperty(InputUtils.java:56)
	at org.richfaces.component.util.InputUtils.getConvertedValue(InputUtils.java:148)
	at org.richfaces.component.util.InputUtils.getConvertedValue(InputUtils.java:137)
	at org.richfaces.renderkit.InputRendererBase.getConvertedValue(InputRendererBase.java:50)
	at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030)
	at javax.faces.component.UIInput.validate(UIInput.java:960)
	at javax.faces.component.UIInput.executeValidate(UIInput.java:1233)
	at javax.faces.component.UIInput.processValidators(UIInput.java:698)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
	at javax.faces.component.UIForm.processValidators(UIForm.java:253)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
	at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1172)
	at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)

+- Component Tree
<UIViewRoot id="j_id1" inView="true" locale="pt_BR" renderKitId="HTML_BASIC" rendered="true" transient="false" viewId="/cadastra_regra.xhtml">
javax_faces_location_HEAD
<ComponentResourceContainer id="javax_faces_location_HEAD" inView="true" rendered="true" transient="false">
<UIOutput id="__rf_skinning_resource" inView="true" rendered="true" transient="false"/>
<UIOutput id="j_id21" inView="true" rendered="true" transient="false"/>
<UIOutput id="j_id22" inView="true" rendered="true" transient="false"/>
<UIOutput id="j_id23" inView="true" rendered="true" transient="false"/>
<UIOutput id="j_id24" inView="true" rendered="true" transient="false"/>
<UIOutput id="j_id25" inView="true" rendered="true" transient="false"/>
<UIOutput id="j_id26" inView="true" rendered="true" transient="false"/>
<UIOutput id="j_id27" inView="true" rendered="true" transient="false"/>
<UIOutput id="j_id28" inView="true" rendered="true" transient="false"/>
<UIOutput id="j_id29" inView="true" rendered="true" transient="false"/>
<UIOutput id="j_id30" inView="true" rendered="true" transient="false"/>
<UIOutput id="j_id31" inView="true" rendered="true" transient="false"/>
<UIOutput id="j_id32" inView="true" rendered="true" transient="false"/>
<UIOutput id="j_id33" inView="true" rendered="true" transient="false"/>
<UIOutput id="j_id34" inView="true" rendered="true" transient="false"/>
<UIOutput id="j_id35" inView="true" rendered="true" transient="false"/>
<UIOutput id="j_id36" inView="true" rendered="true" transient="false"/>
<UIOutput id="j_id37" inView="true" rendered="true" transient="false"/>
<UIOutput id="j_id38" inView="true" rendered="true" transient="false"/>
<UIOutput id="j_id39" inView="true" rendered="true" transient="false"/>
<UIOutput id="_org_richfaces_queue" inView="true" rendered="true" transient="false"/>
</ComponentResourceContainer>
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<UIOutput id="j_idt4" inView="true" rendered="true" transient="false">
<link href="#{facesContext.externalContext.requestContextPath}/css/default.css" rel="stylesheet" type="text/css"/> <title>#{var.title}</title>
</UIOutput>
<UIOutput id="j_idt6" inView="true" rendered="true" transient="false">
<!-- Cabeçalho -->
<HtmlPanelGroup id="j_idt8" inView="true" rendered="true" transient="false">
<img border="0" src="images/logo2.jpg" width="90" height="40"/> <h1>#{var.title}</h1> <table width="100%"> <tr><td style="background-color: #200070" height="5"/></tr> </table>
</HtmlPanelGroup>
<!-- Menu de navegação -->
<HtmlForm enctype="application/x-www-form-urlencoded" id="j_idt11" inView="true" prependId="true" rendered="true" submitted="false" transient="false">
<UIQueue id="j_idt12" ignoreDupResponses="true" inView="true" rendered="true" requestDelay="-2147483648" transient="false"/>
<HtmlPanelGrid border="-2147483648" columns="-2147483648" id="j_idt13" inView="true" rendered="true" styleClass="floatLeft" transient="false">
<UIAccordion activeItem="j_idt15" cycledSwitching="false" id="j_idt14" immediate="false" inView="true" limitRender="false" localValueSet="false" rendered="true" required="false" style="width: 256px;" styleClass="floatLeft" switchType="ajax" transient="false" valid="true">
<UIAccordionItem disabled="false" header="Administração" id="j_idt15" inView="true" name="j_idt15" rendered="true" switchType="ajax" transient="false">
<HtmlOutputLink disabled="false" id="j_idt16" inView="true" rendered="true" transient="false" value="cadastra_servidor.xhtml">
#{var.servidor}
</HtmlOutputLink>
<br/>
<HtmlOutputLink disabled="false" id="j_idt19" inView="true" rendered="true" transient="false" value="cadastra_metodo.xhtml">
#{var.metodo}
</HtmlOutputLink>
<br/>
<HtmlOutputLink disabled="false" id="j_idt22" inView="true" rendered="true" transient="false" value="cadastra_regra.xhtml">
#{var.regra}
</HtmlOutputLink>
</UIAccordionItem>
<UIAccordionItem disabled="false" header="Monitoração" id="j_idt24" inView="true" name="j_idt24" rendered="true" switchType="ajax" transient="false">
<HtmlOutputLink disabled="false" id="j_idt25" inView="true" rendered="true" transient="false" value="lista_arquivos.xhtml">
#{var.listaArquivos}
</HtmlOutputLink>
</UIAccordionItem>
</UIAccordion>
</HtmlPanelGrid>
</HtmlForm>
<!-- Conteudo das paginas -->
<h1>#{var.regra}</h1>
<HtmlForm enctype="application/x-www-form-urlencoded" id="j_idt29" inView="true" prependId="true" rendered="true" submitted="true" transient="false">
<UIPanel id="j_idt30" inView="true" rendered="true" transient="false">
<HtmlPanelGrid border="-2147483648" columns="2" id="j_idt31" inView="true" rendered="true" transient="false">
<HtmlOutputLabel escape="true" for="list-servidores" id="j_idt32" inView="true" rendered="true" transient="false" value="Servidores "/>
<UISelect disabled="false" enableManualInput="false" id="list-servidores" immediate="false" inView="true" localValueSet="false" rendered="true" required="false" selectFirst="true" showButton="true" submittedValue="1" transient="false" valid="true">
<UISelectItems id="j_idt33" inView="true" rendered="true" transient="false" value="javax.faces.model.ListDataModel@692dec"/>
</UISelect>
<HtmlOutputLabel escape="true" for="list-metodos" id="j_idt34" inView="true" rendered="true" transient="false" value="Metodos"/>
<UISelect disabled="false" enableManualInput="false" id="list-metodos" immediate="false" inView="true" localValueSet="false" rendered="true" required="false" selectFirst="true" showButton="true" submittedValue="1" transient="false" valid="true">
<UISelectItems id="j_idt35" inView="true" rendered="true" transient="false" value="javax.faces.model.ListDataModel@cf590"/>
</UISelect>
<HtmlCommandButton action="#{regra.inserir}" actionExpression="#{regra.inserir}" disabled="false" id="j_idt36" immediate="false" inView="true" readonly="false" rendered="true" transient="false" type="submit" value="Cadastrar"/>
</HtmlPanelGrid>
</UIPanel>
</HtmlForm>
<!-- Rodape -->
<HtmlPanelGrid border="-2147483648" columns="-2147483648" id="j_idt38" inView="true" rendered="true" styleClass="rodape" transient="false" width="99%">
<hr/>
<HtmlOutputText escape="true" id="j_idt40" inView="true" rendered="true" styleClass="textoRodape" transient="false" value="PSP/NUSUP/GEROP/SUPRO"/>
</HtmlPanelGrid>
</UIOutput>
</html>
</UIViewRoot>
+- Scoped Variables
Request Parameters Name Value 
j_idt29 j_idt29 
j_idt29:j_idt36 Cadastrar 
j_idt29:list-metodos 1 
j_idt29:list-metodosInput FTP 
j_idt29:list-servidores 1 
j_idt29:list-servidoresInput BRB03 
View Attributes Name Value 
regra br.com.brb.trx.controller.RegraController@ce0197 
Request Attributes Name Value 
metodo br.com.brb.trx.controller.MetodoController@ca62f7 
servidor br.com.brb.trx.controller.ServidorController@1277ffa 
Flash Attributes Name Value 
None 
Session Attributes Name Value 
None 
Application Attributes Name Value 
csfcff com.sun.faces.context.flash.ELFlash@5da364 

Ah blz. Ele tá dizendo que o atributo servidorBean na sua RegraController está null, ou seja, não foi inicializado. Inicialize o atributo:

private ServidorBean servidorBean = new ServidorBean();

Ou crie um construtor padrão da controller inicializando-o.

Arthur… Muito obrigado, nem dormi direito essa noite por conta disso… um abraço!