[Resolvido] Jogar informação do dataTable ou extendedDataTable para o formulário - JSF!

1 resposta
C
Pessoal, tenho o seguinte desafio. Tenho um extendedDataTable, do RichFaces, quando seleciono a linha dele queria que as informações dessa linha selecionada fossem carregadas no formulário. Consigo pegar as informações desse linha através do seguinte método no meu manageBean:
/** Método para selecionar a linha do ExtendeddataTable **/	
	public void selectionListener(AjaxBehaviorEvent event) {
	
        UIExtendedDataTable dataTable = (UIExtendedDataTable) event.getComponent();
        Object originalKey = dataTable.getRowKey();
        selectionItems.clear();
        for (Object selectionKey : selection) {
            dataTable.setRowKey(selectionKey);
            if (dataTable.isRowAvailable()) {
            	
                selectionItems.add(dataTable.getRowData());
                People people =  (People) dataTable.getRowData();
                
                System.out.println("Pessoa Selecionada: "+people.getName());
                              
              }
        }
        dataTable.setRowKey(originalKey);
    }
Quem faz a chamada do método acima:
<rich:extendedDataTable            
            rendered="true"
	    value = "#{peopleBean.peopleList}" 
            var = "dataGridIterator" 
            styleClass = "conteudoDataGrid" 
            rowClasses = "odd-row, even-row" 
            id = "dataGrid" 
            rows = "20"          
            iterationStatusVar = "it"         
            selectionMode="single" selection="#{peopleBean.selection}">
            
            <a4j:ajax  event="selectionchange" listener="#{peopleBean.selectionListener}" render="dataGrid form"/>   <<<<<<< aqui é feita a chamada para o método do manageBean

...
</rich:extendedDataTable>
Como disse... dentro do método selectionListener() do MB eu consigo pegar todas as informações da linha da tabela, mas como voltar essas informações para o formulário ?? Só não postei todos os código (do formulário, da tabela, etc) pra não ficar muito poluído pra ler o tópico, mas se precisar irei posta-los.

1 Resposta

C
Pessoal, felizmente consegui resolver o problema. Tive que alterar meu método selectionListener para popular o "manageBean atual" e ficou assim:
/** Método para selecionar a linha do ExtendeddataTable e carrega-la no form **/
	public void selectionListener(AjaxBehaviorEvent event) {

		UIExtendedDataTable dataTable = (UIExtendedDataTable) event
				.getComponent();
		Object originalKey = dataTable.getRowKey();
		selectionItems.clear();
		for (Object selectionKey : selection) {
			dataTable.setRowKey(selectionKey);
			if (dataTable.isRowAvailable()) {

				selectionItems.add(dataTable.getRowData());
				People pp = (People) dataTable.getRowData();

                                /** Populando aqui o manageBean atual**/
				setName(pp.getName());
				setDateBirth(pp.getDateBirth());
				setGender(pp.getGender());
				setCivilStatus(pp.getCivilStatus());
				setRg(pp.getRg());
				setCpf(pp.getCpf());
				setPhone(pp.getPhone());
				setEmail(pp.getEmail());
			}
		}
		dataTable.setRowKey(originalKey);
	}
e no xhtml tive que adicionar no dataGrid, que contém meus dados do formulário, um ID para poder renderiza-lo no momento em que eu clicar em uma linha da dabela:
<h:panelGrid columns = "2" style = "font-size:12pt; margin-left: 20px" id="panelForm"  > <<<< adicionei o id="panelForm"
                          
                          <h:panelGrid columns = "2" >  
	                            <h:outputLabel value = "Nome:"/>
...
E finalmente o ajax que é responsável por selecionar a linha e carrega-la no form:
<rich:extendedDataTable 
            
            rendered="true"
			value = "#{peopleBean.peopleList}" 
            var = "dataGridIterator" 
            styleClass = "conteudoDataGrid" 
            rowClasses = "odd-row, even-row" 
            id = "dataGrid" 
            rows = "20"          
            iterationStatusVar = "it" 
           
            selectionMode="single" selection="#{peopleBean.selection}">
            
            <a4j:ajax  event="selectionchange" listener="#{peopleBean.selectionListener}" render="dataGrid,panelForm"/> <<<< aqui estou renderizando pelo id panelForm que adicionei logo acima.
...  
</rich:extendedDataTable>

Bom estou postando a solução, para resolver problemas que futuramente alguém pode ter.

Criado 29 de maio de 2012
Ultima resposta 29 de mai. de 2012
Respostas 1
Participantes 1