[RESOLVIDO] RichFaces - Componentes: ScrollableDataTable e ModalPanel

Olá… sou novo aqui no fórum e novo trabalhando também com RichFaces;

Gostaria da ajuda dos Senhores;

Tenho um ScrollableDataTable com os dados vindo de uma tabela,

Gostaria que ao selecionar um registro do ScrollableDataTable, e clicar em um botão Excluir (logo abaixo do ScrollableDataTable) abrisse um ModalPanel para confirmar a exclusão (mostrando o registro selecionado e dois botões, Confirmar e Cancelar. Mais não estou conseguindo pegar o registro selecionado no ScrollableDataTable (Não sei se tenho q fazer um novo método no meu bean, ou utilizar o próprio ScrollableDataTable) e mostrar no ModalPanel. Se alguem puder me ajudar;
Abaixo segue o código

<rich:scrollableDataTable rowKeyVar="rkv" frozenColCount="1" height="300px" width="500px" id="lista" rows="2" value="#{pessoa.consultar}" var="pessoa" sortMode="single" selection="#{pessoa.consultar}"> <rich:column id="codigo"> <f:facet name="header"> <h:outputText value="Código"/> </f:facet> <h:outputText value="#{pessoa.pess_seq}"/> </rich:column> <rich:column id="nome"> <f:facet name="header"> <h:outputText value="Nome"/> </f:facet> <h:outputText value="#{pessoa.pess_nome}"/> </rich:column> <rich:column id="idade"> <f:facet name="header"> <h:outputText value="Idade"/> </f:facet> <h:outputText value="#{pessoa.pess_idade}"/> </rich:column> <rich:column id="opcoes"> <f:facet name="header"> <h:outputText value="Opções"/> </f:facet> <h:commandLink id="delete" action="#{pessoa.loadExcluir}" immediate="true"> <h:outputText value="Excluir"/> <f:param name="pess_seq" value="#{pessoa.pess_seq}"/> </h:commandLink> </rich:column> </rich:scrollableDataTable> <rich:datascroller align="left" for="lista" maxPages="20" /> <br> <br> <a4j:commandButton value="Excluir" reRender="panel" oncomplete="javascript:RichFaces.showModalPanel('panel', {width:450, top:200});" /> </h:form> <a href="javascript:Richfaces.showModalPanel('panel',{width:450, top:200})">Mostrar Painel</a> <rich:modalPanel id="panel" autosized="true" zindex="2000"> <f:facet name="header"> <h:outputText value="Confirma Exclusão?" /> </f:facet> <f:facet name="controls"> <span style="cursor:pointer" onclick="javascript:Richfaces.hideModalPanel('panel')">X</span> </f:facet> <rich:dataTable value="#{pessoa.pessoaSelecionada}" var="obj" id="table" > <rich:column> <f:facet name="header"> <h:outputText value="Código"/> </f:facet> <h:outputText value="#{obj.pess_seq}" /> </rich:column> <rich:column> <f:facet name="header"> <h:outputText value="Nome"/> </f:facet> <h:outputText value="#{obj.pess_nome;}" /> </rich:column> <rich:column> <f:facet name="header"> <h:outputText value="Idade"/> </f:facet> <h:outputText value="#{obj.pess_idade}" /> </rich:column> </rich:dataTable> </rich:modalPanel>

Valeu!

Cara, coloca o codigo do seu ManageBean ai pra gente dar uma olhada.

Segue abaixo o Bean. Ainda não consegui fazer com que o método pessoaSelecionada funcione direito.


public class ManterPessoaBean {
	
	private Long pess_seq;
	private String pess_nome;
	private int pess_idade;
	
	//getters e setters


	@SuppressWarnings("finally")
	public String incluir() {
		try {
			ManterPessoaBO pessoaBO = new ManterPessoaBO();
			PessoaDTO pessoaDTO = new PessoaDTO();
			
			pessoaDTO.setPess_nome(this.pess_nome);
			pessoaDTO.setPess_idade(this.pess_idade);
			
			pessoaBO.incluir(pessoaDTO);

		} catch (Exception e) {
				e.printStackTrace();
		} finally {
			return "sucesso";
		}
	}
	
	@SuppressWarnings("unchecked")
	public List getConsultar() throws Throwable {
		ManterPessoaBO pessoaBO = new ManterPessoaBO();
		List lista;
		PessoaDTO pessoaDTO = new PessoaDTO();
		pessoaDTO.setPess_nome(pess_nome);
		pessoaDTO.setPess_seq(pess_seq);

		lista = pessoaBO.consultar(pessoaDTO);
		return lista;
	}
	
	@SuppressWarnings("unchecked")
	public List getPegarRegistro() throws Throwable {
		List lista = null;
		lista.add(0, this.pess_seq);
		lista.add(1, this.pess_nome);
		lista.add(2, this.pess_idade);
		return lista;
	}
	
	@SuppressWarnings("unchecked")
	public List getPessoaSelecionada() throws Throwable {
		List lista = null;
		lista.add(this.getConsultar());
		return lista;
	}
	@SuppressWarnings("unchecked")
	public List getMostrarRegistro() throws Throwable {
		return null;
	}
	public String alterar() {
		try {
			ManterPessoaBO pessoaBO = new ManterPessoaBO();
			PessoaDTO pessoaDTO = new PessoaDTO();
			
			pessoaDTO.setPess_nome(this.pess_nome);
			pessoaDTO.setPess_seq(this.pess_seq);
			pessoaDTO.setPess_idade(this.pess_idade);
			
			pessoaBO.alterar(pessoaDTO);
			return "sucesso";
			
		} catch (Exception e) {
			return "erro";
		}
	}
	
	public String excluir() {
		try {
			ManterPessoaBO pessoaBO = new ManterPessoaBO();
			PessoaDTO pessoaDTO = new PessoaDTO();
			
			pessoaDTO.setPess_nome(this.pess_nome);
			pessoaDTO.setPess_seq(this.pess_seq);
			pessoaDTO.setPess_idade(this.pess_idade);
			
			pessoaBO.excluir(pessoaDTO);
			return "sucesso";
		} catch (Exception e) {
			return "erro";
		}
	}
	
	public String loadAlterar() throws Throwable {
		HttpServletRequest request = null;
		PessoaDTO pessoaDTO = new PessoaDTO();
		Long codigo;
		try {
			request = (HttpServletRequest) FacesContext.getCurrentInstance()
					.getExternalContext().getRequest();
			String parametro = (String) request.getParameter("pess_seq");
			codigo = Long.parseLong(parametro);
			ManterPessoaBO pessoaBO = new ManterPessoaBO();
			
			pessoaDTO = pessoaBO.consultar(codigo); 
			pess_nome = pessoaDTO.getPess_nome();
			pess_seq = pessoaDTO.getPess_seq();
			pess_idade = pessoaDTO.getPess_idade();
			
			return "sucesso";
		} catch (Throwable e) {
				return "erro";
		}
	}
	
	public String loadExcluir() throws Throwable {
		HttpServletRequest request = null;
		PessoaDTO pessoaDTO = new PessoaDTO();
		Long codigo;
		try {
			request = (HttpServletRequest) FacesContext.getCurrentInstance()
					.getExternalContext().getRequest();
			String parametro = (String) request.getParameter("pess_seq");
			codigo = Long.parseLong(parametro);
			ManterPessoaBO pessoaBO = new ManterPessoaBO();
			
			pessoaDTO = pessoaBO.consultar(codigo);
			pess_nome = pessoaDTO.getPess_nome();
			pess_seq = pessoaDTO.getPess_seq();
			pess_idade = pessoaDTO.getPess_idade();
			
			return "sucesso";
		} catch (Exception e) {
			return "erro";
		}
	}
}

Se você for no demo do richfaces para o ScrollableDataTable em http://livedemo.exadel.com/richfaces-demo/richfaces/scrollableDataTable.jsf;jsessionid=80F575645A9D83808C280718BBEC2203?c=scrollableDataTable
e ver o código fonte desse demo (clicando no botão View Page Source)
vai ver que o componente ScrollableDataTable tem um atributo selection que é como se deve manipular as seleções feitas no ScrollableDataTable.

<rich:scrollableDataTable rowKeyVar="rkv" frozenColCount="1" height="400px" 

                width="700px" id="carList" rows="40" columnClasses="col"

                value="#{dataTableScrollerBean.allCars}" var="category" sortMode="single"

                selection="#{dataTableScrollerBean.selection}">]

Mas como ver o tipo desse selection e como ele fez essa manipulação?
Mais embaixo na mesma página tem um link RichFaces. Most Important Links para http://jboss.com/index.html?module=bb&op=viewtopic&t=104575
na página indica vc encontra o link para o acesso anônimo ao SCM do RichFaces (em http://anonsvn.jboss.org/repos/richfaces).
fuçando um pouco você chega aqui: http://anonsvn.jboss.org/repos/richfaces/trunk/samples/richfaces-demo/src/main/java/org/richfaces/datatablescroller/DataTableScrollerBean.java
onde vê que o atributo selection é do tipo org.richfaces.model.selection.SimpleSelection
e que o código para manipular uma seleção é:

public String takeSelection() {
		getSelectedCars().clear();
		Iterator<SimpleRowKey> iterator = getSelection().getKeys();
		while (iterator.hasNext()){
			SimpleRowKey key = iterator.next();
			table.setRowKey(key);
			if (table.isRowAvailable()) {
				getSelectedCars().add((DemoInventoryItem) table.getRowData());
			}
		}
		return null;
	}

espero que eu não tenha sido tão prolixo. só quis explicar o raciocínio todo da fuçada :smiley:

Cara, de prolixo tu não teve nada…

Me ajudou pra caramba! Obrigado… fiz tudo certinho, até descobri um arquivo phaseTracker.jar dentro do WEB-INF/lib da aplicação de exemplo que ao meu ver é necessário…

Agora saka só a situação…

Antes de eu descobrir esse .jar o erro era o seguinte:

04/03/2008 10:42:23 com.sun.faces.lifecycle.Phase doPhase SEVERE: JSF1054: (Phase ID: RENDER_RESPONSE 6, View ID: /ManterPessoa.jsp) Exception thrown during phase execution: javax.faces.event.PhaseEvent[source=com.sun.faces.lifecycle.LifecycleImpl@126aaca] 04/03/2008 10:42:23 org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet Faces Servlet threw exception java.lang.IllegalArgumentException at org.richfaces.renderkit.ModalPanelRendererBase.checkOptions(ModalPanelRendererBase.java:91) at org.richfaces.renderkit.html.ModalPanelRenderer.doEncodeBegin(ModalPanelRenderer.java:187) at org.richfaces.renderkit.html.ModalPanelRenderer.doEncodeBegin(ModalPanelRenderer.java:178) at org.ajax4jsf.renderkit.RendererBase.encodeBegin(RendererBase.java:101) at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:802) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:934) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:942) at com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:273) at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:204) at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108) at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:216) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141) at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at br.teste.util.FilterHibernate.doFilter(FilterHibernate.java:21) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Unknown Source)

Beleza, continue fuçando o SVN da JBoss… (hehehe) e descobri o tal arquivo… Achei que seria a solução para todos os meus problemas… mais o que ganhei foi um erro novo…

04/03/2008 10:44:17 org.exadel.jsf.PhaseTracker beforePhase INFO: BEFORE RESTORE_VIEW 1 04/03/2008 10:44:17 org.exadel.jsf.PhaseTracker afterPhase INFO: AFTER RESTORE_VIEW 1 04/03/2008 10:44:17 org.exadel.jsf.PhaseTracker beforePhase INFO: BEFORE RENDER_RESPONSE 6 04/03/2008 10:44:17 com.sun.faces.lifecycle.Phase doPhase SEVERE: JSF1054: (Phase ID: RENDER_RESPONSE 6, View ID: /ManterPessoa.jsp) Exception thrown during phase execution: javax.faces.event.PhaseEvent[source=com.sun.faces.lifecycle.LifecycleImpl@cee41f] 04/03/2008 10:44:17 org.exadel.jsf.PhaseTracker afterPhase INFO: AFTER RENDER_RESPONSE 6 04/03/2008 10:44:17 org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet Faces Servlet threw exception java.lang.IllegalArgumentException at org.richfaces.renderkit.ModalPanelRendererBase.checkOptions(ModalPanelRendererBase.java:91) at org.richfaces.renderkit.html.ModalPanelRenderer.doEncodeBegin(ModalPanelRenderer.java:187) at org.richfaces.renderkit.html.ModalPanelRenderer.doEncodeBegin(ModalPanelRenderer.java:178) at org.ajax4jsf.renderkit.RendererBase.encodeBegin(RendererBase.java:101) at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:802) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:934) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:942) at com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:273) at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:204) at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108) at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:216) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141) at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at br.teste.util.FilterHibernate.doFilter(FilterHibernate.java:21) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Unknown Source)

Alguém tem alguma idéia do que pode ser a causa desse erro? Acredito que seja alguma coisa haver com o ciclo de vida do JSF… mais não sei o q fazer…
Aguardo resposta… valeu galera!

é o seguinte: eu não entendi o problema, mas pensei como você: deve ser alguma coisa nas fases do ciclo de vida.
fuçando o http://anonsvn.jboss.org/repos/richfaces/trunk/samples/scrollableDataTableDemo encontrei dentro do phaseTracker.jar o documento META-INF/faces-config.xml e nele há uma configuração:

<lifecycle>
      <phase-listener>org.exadel.jsf.PhaseTracker</phase-listener>
</lifecycle>

no faces-config.xml do scrollableDataTableDemo também há um listener desse:

<lifecycle> <phase-listener>org.richfaces.demo.benchmark.PhaseDemarcationNotifier</phase-listener> </lifecycle>

veja se esses dois listeners estão configuração na sua aplicação.
mas não tenho certeza se isso resolve o problema.

Eu já usei esse scrollableDataTable e não precisei do phaseTracker.jar e não precisei configurar nenhum <phase-listener>.

Note que esse exemplo [url]http://anonsvn.jboss.org/repos/richfaces/trunk/samples/scrollableDataTableDemo[/url] não é o do demo do richfaces ( que está em [url]http://anonsvn.jboss.org/repos/richfaces/trunk/samples/richfaces-demo[/url] ).

Quem sabe então você retirando esse phaseTracker.jar do seu WEB-INF/lib passe a funcionar!

Cara se o seu scrollableDataTable estiver funcionando, preenchendo seus dados, e seu problema for carregar os dados no DataTable, acho que assim pode funcionar, testa ai pra ver, se vc nao tiver resolvido ainda.

import javax.faces.context.FacesContext;

public class ManterPessoaBean {   
       
    private Long pess_seq;   
    private String pess_nome;   
    private int pess_idade;   
    private List<pessoaDTO> PessoaSelecionada=null; //Atributo --> <rich:dataTable value="#{pessoa.pessoaSelecionada}" var="obj" id="table" >   
    
    //getters e setters   
  
  
    @SuppressWarnings("finally")   
    public String incluir() {   
        try {   
            ManterPessoaBO pessoaBO = new ManterPessoaBO();   
            PessoaDTO pessoaDTO = new PessoaDTO();   
               
            pessoaDTO.setPess_nome(this.pess_nome);   
            pessoaDTO.setPess_idade(this.pess_idade);   
               
            pessoaBO.incluir(pessoaDTO);   
  
        } catch (Exception e) {   
                e.printStackTrace();   
        } finally {   
            return "sucesso";   
        }   
    }   
       
    @SuppressWarnings("unchecked")   
    public List getConsultar() throws Throwable {   
        ManterPessoaBO pessoaBO = new ManterPessoaBO();   
        List lista;   
        PessoaDTO pessoaDTO = new PessoaDTO();   
        pessoaDTO.setPess_nome(pess_nome);   
        pessoaDTO.setPess_seq(pess_seq);   
  
        lista = pessoaBO.consultar(pessoaDTO);   
        return lista;   
    }   
       
    @SuppressWarnings("unchecked")   
    public List getPegarRegistro() throws Throwable {   
        List lista = null;   
        lista.add(0, this.pess_seq);   
        lista.add(1, this.pess_nome);   
        lista.add(2, this.pess_idade);   
        return lista;   
    }   
       
    @SuppressWarnings("unchecked")   
    public List getMostrarRegistro() throws Throwable {   
        return null;   
    }   
    public String alterar() {   
        try {   
            ManterPessoaBO pessoaBO = new ManterPessoaBO();   
            PessoaDTO pessoaDTO = new PessoaDTO();   
               
            pessoaDTO.setPess_nome(this.pess_nome);   
            pessoaDTO.setPess_seq(this.pess_seq);   
            pessoaDTO.setPess_idade(this.pess_idade);   
               
            pessoaBO.alterar(pessoaDTO);   
            return "sucesso";   
               
        } catch (Exception e) {   
            return "erro";   
        }   
    }   
       
    public String excluir() {   
        try {   
            ManterPessoaBO pessoaBO = new ManterPessoaBO();   
            PessoaDTO pessoaDTO = new PessoaDTO();   
               
            pessoaDTO.setPess_nome(this.pess_nome);   
            pessoaDTO.setPess_seq(this.pess_seq);   
            pessoaDTO.setPess_idade(this.pess_idade);   
               
            pessoaBO.excluir(pessoaDTO);   
            return "sucesso";   
        } catch (Exception e) {   
            return "erro";   
        }   
    }   
       
    public String loadAlterar() throws Throwable {   
        HttpServletRequest request = null;   
        PessoaDTO pessoaDTO = new PessoaDTO();   
        Long codigo;   
        try {   
            request = (HttpServletRequest) FacesContext.getCurrentInstance()   
                    .getExternalContext().getRequest();   
            String parametro = (String) request.getParameter("pess_seq");   
            codigo = Long.parseLong(parametro);   
            ManterPessoaBO pessoaBO = new ManterPessoaBO();   
               
            pessoaDTO = pessoaBO.consultar(codigo);   
            pess_nome = pessoaDTO.getPess_nome();   
            pess_seq = pessoaDTO.getPess_seq();   
            pess_idade = pessoaDTO.getPess_idade();   
               
            return "sucesso";   
        } catch (Throwable e) {   
                return "erro";   
        }   
    }   
       
	public List<pessoaDTO> getPessoaSelecionada() {
		return PessoaSelecionada;
	}

	public void setPessoaSelecionada(List<pessoaDTO> pessoaSelecionada) {
		PessoaSelecionada = pessoaSelecionada;
	}   

    //Load alterar e excluir pode ser o mesmo
    public String loadExcluir() throws Throwable {   
    	String parametro = (String) FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("pess_seq");
        PessoaDTO pessoaDTO = new PessoaDTO();   
        Long codigo;   
        try {   
            codigo = Long.parseLong(parametro);   
            ManterPessoaBO pessoaBO = new ManterPessoaBO();   
            pessoaDTO = pessoaBO.consultar(codigo);   
            PessoaSelecionada.add(pessoaDTO);
        } catch (Exception e) {   
        }   
    }
}  

La no botao de excluir no seu scrollableDataTable

  <h:commandLink id="delete" action="#{pessoa.loadExcluir}" onclick="Richfaces.showModalPanel('panel', {width:450, top:200});" >   
                <h:outputText value="Excluir"/>   
                <f:param name="pess_seq" value="#{pessoa.pess_seq}"/>   
            </h:commandLink>   

Bem Senhores, agradeço toda e qualquer ajuda… parcimonioso vc estava certo, não precisa de nenhum PhaseListener, meu erro era que eu confundi os exemplos no SVN da JBoss… hehehe…mais agora já tá funcionando…

Só estou esbarrando no último probleminha… Quero que o registro selecionado no ScrollableDataTable seja mostrado dentro do ModalPanel junto com dois botões (Confirmar e Cancelar). O Cancelar oculta o ModalPanel novamente, e o Confirmar que vai executar meu método no bean #{pessoa.loadExcluir} recebendo o código do registro a ser deletado (pess_seq). Só que não estou conseguindo pegar o registro selecionado no ScrollableDataTable e mostrar no ModalPanel… alguém tem alguma idéia??

Desde já agradeço!

Vou postar o código do JSP e do BEAN para facilitar:

Esse é o meu JSP

[code]<rich:scrollableDataTable value="#{questao.listar}" var=“obj”
id=“lista” rows=“5” sortMode=“single”
frozenColCount=“1” width=“805px” height=“200px” rowClasses=“linhaTabela1,linhaTabela2”
columnClasses=“colunaCentro,colunaEsquerda,colunaEsquerda,colunaCentro,colunaEsquerda,colunaEsquerda,colunaEsquerda,colunaEsquerda”
selection="#{questao.selection}" focus="#{obj.quesSeq}">
<rich:column id=“codigo” sortExpression="#{obj.quesSeq}">
<f:facet name=“header” >
<h:outputText value=“Código” />
</f:facet>
<h:outputText value="#{obj.quesSeq}" />
</rich:column>
<rich:column id=“descricao” sortExpression="#{obj.quesDesc}">
<f:facet name=“header” >
<h:outputText value=“Descrição” />
</f:facet>
<h:outputText value="#{obj.quesDesc}" />
</rich:column>
<rich:column id=“tipo” sortExpression="#{obj.quesTipo}">
<f:facet name=“header” >
<h:outputText value=“Tipo” />
</f:facet>
<h:outputText value="#{obj.quesTipo}" />
</rich:column>
<rich:column id=“ordem” sortExpression="#{obj.quesOrdm}">
<f:facet name=“header” >
<h:outputText value=“Ordem” />
</f:facet>
<h:outputText value="#{obj.quesOrdm}" />
</rich:column>
<rich:column id=“grupo” sortExpression="#{obj.quesPai.quesDesc}">
<f:facet name=“header” >
<h:outputText value=“Grupo” />
</f:facet>
<h:outputText value="#{obj.quesPai.quesDesc}" />
</rich:column>
<rich:column id=“status” sortExpression="#{obj.quesStat}">
<f:facet name=“header” >
<h:outputText value=“Status” />
</f:facet>
<h:outputText value="#{obj.quesStat}" />
</rich:column>
<rich:column id=“alterar”>
<f:facet name=“header” >
<h:outputText value=“Alterar” />
</f:facet>
<h:commandLink id=“edit” action="#{questao.loadAlterar}" immediate=“true”>
<h:outputText value=“Alterar”/>
<f:param name=“quesSeq” value="#{obj.quesSeq}"/>
</h:commandLink>
</rich:column>
<rich:column id=“excluir”>
<f:facet name=“header” >
<h:outputText value=“Excluir” />
</f:facet>
<h:commandLink id=“del” action="#{questao.loadExcluir}" immediate=“true”>
<h:outputText value=“Excluir”/>
<f:param name=“quesSeq” value="#{obj.quesSeq}"/>
</h:commandLink>
</rich:column>
</rich:scrollableDataTable>
<rich:spacer height=“30”/>
<rich:datascroller align=“left” for=“lista” maxPages=“20”/>

			<h:outputText id="excecao" value="#{excecao.excecao}" styleClass="outputExcecao"/><br>
			<h:outputText id="causa" value="#{excecao.causa}" styleClass="outputExcecao"/>
	
		<br><br>
		<input type="button" onclick="javascript:Richfaces.showModalPanel('mp',{width:450, top:200})" value="Excluir" style="btnexcluir"/>
        
		<a4j:commandButton value="Excluir" reRender="table" 
            action="#{questao.takeSelection}" styleClass="btnexcluir" 
            oncomplete="javascript:Richfaces.showModalPanel('mp',{width:450, top:200});">
            <f:param name="pess_seq" value="#{pessoa.pess_seq}"/> 
        </a4j:commandButton>
    </h:form>
	<rich:modalPanel  id="mp" minHeight="200" minWidth="450" 
        height="200" width="500" zindex="2000">
        <f:facet name="header">
            <h:outputText value="Confirmação de Exclusão" />
        </f:facet>
        <f:facet name="controls">
            <h:graphicImage value="../imagens/close.png" style="cursor:pointer" onclick="Richfaces.hideModalPanel('mp')" />
        </f:facet>
            <rich:dataTable value="#{questao.selectedQuestao}" var="sel" id="table">
                <rich:column>
                    <f:facet name="header"><h:outputText value="Código" /></f:facet>
                    <h:outputText value="#{sel.quesSeq}" />
                </rich:column>
                <rich:column id="descricao">
                    <f:facet name="header"><h:outputText value="Descrição" /></f:facet>
                    <h:outputText value="#{sel.quesDesc}" />
                </rich:column>
            </rich:dataTable>
            <br>
            <input type="button" onclick="javascript:Richfaces.hideModalPanel('mp')" value="Excluir" style="btnexcluir"/>&nbsp;
            <input type="button" onclick="javascript:Richfaces.hideModalPanel('mp')" value="Cancelar" style="btncancelar"/>
    </rich:modalPanel> [/code]

E esse é meu BEAN:

public SimpleSelection getSelection() {
		return selection;
	}

	public void setSelection(SimpleSelection selection) {
		System.out.println("Setting Started");
		this.selection = selection;
		System.out.println("Setting Complete");
	}
	
	@SuppressWarnings("unchecked")
	public String takeSelection() {
		getSelectedQuestao().clear();
		Iterator<SimpleRowKey> iterator = getSelection().getKeys();
		while (iterator.hasNext()){
			SimpleRowKey key = iterator.next();
			table.setRowKey(key);
			if (table.isRowAvailable()) {
				getSelectedQuestao().add((QuestoesBaseDTO) table.getRowData());
			}
		}
		return null;
	}

	public ArrayList<QuestoesBaseDTO> getSelectedQuestao() {
		return selectedQuestao;
	}

	public void setSelectedQuestao(ArrayList<QuestoesBaseDTO> selectedQuestao) {
		this.selectedQuestao = selectedQuestao;
	}

Debugando esse código vi que o getSelectedQuestao() está retornando nulo, logo o modalpanel é carregado mais nada é mostrado … Se alguem puder me ajudar… vlw

Deixe seu modalPanel dentro do <h:form>.

Coloquei o modalPanel dentro do form. Continuou a mesma coisa… ele carrega o modalPanel mais nao mostra o q eu selecionei no scrollableDataTable…

Cara voce esta se confundindo, o selectedQuestao tem que ser um atributo tipo List, ele tem que ser preenchido, e ele que a sua dataTable pega pra criar a tabela, se este atributo nao esta sendo populado nao vai retornar nada, no loadExcluir que passei pra vc ele esta sendo preenchido…

    public String loadExcluir() throws Throwable {     
        String parametro = (String) FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("pess_seq");   
        PessoaDTO pessoaDTO = new PessoaDTO();     
        Long codigo;     
        try {     
            codigo = Long.parseLong(parametro);     
            ManterPessoaBO pessoaBO = new ManterPessoaBO();     
            pessoaDTO = pessoaBO.consultar(codigo);     
            PessoaSelecionada.add(pessoaDTO);   
        } catch (Exception e) {     
        }     
    }   

La no seu codigo anterior, (este ai e outro), PessoaSelecionada tem que ser um atributo tipo Lista de Objetos private List<pessoaDT> PessoaSelecionada, com seus devidos getters e setters, o seu dataTable ira recuperar os valores assim, <rich:dataTable value="#{pessoa.pessoaSelecionada}" var="obj" id="table" >

Alias, aproveitando o tópico… to tentando abrir o modalPanel logo que a pagina é carrega e num ta indo nem com bomba rs

<body onload="javascript:Richfaces.showModalPanel('ft',{width:450, top:200})">

Alguém já precisou fazer algo parecido?
Vi exemplos idênticos, mas aqui não vai, não da erro de js nada.

Alias, aproveitando o tópico… to tentando abrir o modalPanel logo que a pagina é carrega e num ta indo nem com bomba rs

<body onload="javascript:Richfaces.showModalPanel('ft',{width:450, top:200})">

Alguém já precisou fazer algo parecido?
Vi exemplos idênticos, mas aqui não vai, não da erro de js nada.

Luiz Aguiar, ve se isso pode te ajudar.

<body onload="callScript()">
    <h:form>
    <a4j:jsFunction name="callScript"  oncomplete="Richfaces.showModalPanel('mp',{width:450, top:200})">
    </a4j:jsFunction>
</h:form>

cara num foi tbm não… que meleca isso rs

<script type="text/javascript"> window.onload=function(){ Richfaces.showModalPanel('mp'); } </script>

se for exibir com uma condição:

<script type="text/javascript"> window.onload=function(){ #{<EXPRESSAO BOOLEANA> ? "Richfaces.showModalPanel('mp')" : ""} } </script>

Aleluia… rsrs… agora funcionou amigo… brigadão!

Bem galera, depois de muito quebrar a cabeça e contar com a ajuda de todos aqui, consegui fazer com que o modalPanel mostrasse o q eu selecionei no scrollabledatatable. Por isso resolvi postar o código aqui para ajudar outras pessoas que queiram fazer a mesma coisa…

Ficou assim meu JSP

Código do scrollableDataTable

<rich:scrollableDataTable  value="#{questao.listar}" var="obj" 
					id="lista" rows="10" sortMode="single" binding="#{questao.table}" headerClass="colunaTabela"
					frozenColCount="1" width="610px" height="200px" rowClasses="linhaTabela1,linhaTabela2"
					columnClasses="colunaCentro,colunaEsquerda,colunaEsquerda,colunaCentro,colunaEsquerda,colunaEsquerda,colunaEsquerda,colunaEsquerda">	
						<rich:column id="quesSeq" sortExpression="#{obj.quesSeq}">
							<f:facet name="header" >
								<h:outputText value="Código"/>	
							</f:facet>
							<h:outputText value="#{obj.quesSeq}" />
						</rich:column>
						<rich:column id="descricao" sortExpression="#{obj.quesDesc}">
							<f:facet name="header" >
								<h:outputText value="Descrição" />
							</f:facet>
							<h:outputText value="#{obj.quesDesc}" />
						</rich:column>
						<rich:column id="tipo" sortExpression="#{obj.quesTipo}">
							<f:facet name="header" >
								<h:outputText value="Tipo" />
							</f:facet>
							<h:outputText value="#{obj.quesTipo}" />
						</rich:column>
						<rich:column id="ordem" sortExpression="#{obj.quesOrdm}">
							<f:facet name="header" >
								<h:outputText value="Ordem" />
							</f:facet>
							<h:outputText value="#{obj.quesOrdm}" />
						</rich:column>
						<rich:column id="grupo" sortExpression="#{obj.quesPai.quesDesc}">
							<f:facet name="header" >
								<h:outputText value="Grupo" />
							</f:facet>
							<h:outputText value="#{obj.quesPai.quesDesc}" />
						</rich:column>
						<rich:column id="status" sortExpression="#{obj.quesStat}">
							<f:facet name="header" >
								<h:outputText value="Status" />
							</f:facet>
							<h:outputText value="#{obj.quesStat}" />
						</rich:column>
					</rich:scrollableDataTable>

Código do ModalPanel com DataTable


<rich:modalPanel  id="mp" minHeight="200" minWidth="450" 
            height="200" width="500" zindex="2000">
            <f:facet name="header">
                <h:outputText value="Confirmação de Exclusão" />
            </f:facet>
            <f:facet name="controls">
                <h:graphicImage value="../imagens/close.png" style="cursor:pointer" onclick="Richfaces.hideModalPanel('mp')" />
            </f:facet>
            	<rich:dataTable value="#{questao.selectedQuestao}" var="sel" id="table" styleClass="tableExclusao">
	                <rich:columnGroup styleClass="tableExclusao">
		                <rich:column colspan="2">
		                    <h:outputText value="Deseja excluir a questão base: " styleClass="label"/>
		                    <h:outputText value="#{sel.quesSeq}" styleClass="label"/>
		                    <h:outputText value=" - " styleClass="label"/>
		                    <h:outputText value="#{sel.quesDesc}" styleClass="label"/>
		                    <h:outputText value="?" styleClass="label"/>
		                </rich:column>
	                </rich:columnGroup>
	                <rich:columnGroup styleClass="tableExclusao">
	                <rich:column>
	                    <a4j:commandButton value="Excluir" action="#{questao.excluir}" styleClass="btnexcluir">
	                    	<f:param name="quesSeq" value="#{sel.quesSeq}"/>
	                    </a4j:commandButton>
	                </rich:column>
	                <rich:column >
	                    <a4j:commandButton value="Cancelar" onclick="javascript:Richfaces.hideModalPanel('mp')" styleClass="btncancelar"/>
	                </rich:column>
	                </rich:columnGroup>
	            </rich:dataTable>
                <br>
                 
	            	&nbsp;
              	
        </rich:modalPanel> 

Meu BEAN ficou assim:


	private ArrayList<QuestoesBaseDTO> selectedQuestao = new ArrayList<QuestoesBaseDTO>(); 
	private HtmlScrollableDataTable table;

	@SuppressWarnings("unchecked")
	public List getListar() throws Throwable{
		try 
	    { 
			QuestoesBaseBO bo = new QuestoesBaseBO();
			List lista;
			QuestoesBaseDTO dto = new QuestoesBaseDTO();
			dto.setQuesDesc(quesDesc);
			dto.setQuesTipo(quesTipo);
			dto.setQuesPai(new QuestoesBaseDTO());
			dto.getQuesPai().setQuesSeq(quesPai);
			dto.setQuesStat(quesStat);
			lista = bo.listar(dto);
			return lista;
	    }
		catch(Exception e){ 
	    	ControleExcecao.trataExcecao(e,ControleExcecao.ERRO_CONSULTAR);
	    	return null;
	    } 
	}
	
	@SuppressWarnings("unchecked")
	public String takeSelection() {
		getSelectedQuestao().clear();
		Iterator<SimpleRowKey> iterator = table.getSelection().getKeys();
		while (iterator.hasNext()){
			SimpleRowKey key = iterator.next();
			table.setRowKey(key);
			if (table.isRowAvailable()) {
				getSelectedQuestao().add((QuestoesBaseDTO) table.getRowData());
			}
		}
		return null;
	}
	
	public ArrayList<QuestoesBaseDTO> getSelectedQuestao() {
		HttpServletRequest request = null; 
		request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
		
		Iterator<QuestoesBaseDTO> iterator = selectedQuestao.iterator();
		QuestoesBaseDTO dto = new QuestoesBaseDTO();
		while (iterator.hasNext()){
			dto = iterator.next();
		}
		HttpSession session = request.getSession();
		session.setAttribute("quesSeq",dto.getQuesSeq());
		return selectedQuestao;
	}

	public void setSelectedQuestao(ArrayList<QuestoesBaseDTO> selectedQuestao) {
		this.selectedQuestao = selectedQuestao;
	}

Valeu pela ajuda de todos! Obrigado!