Duvida com rich:dataTable

11 respostas
joaosavio

olá pessoal, tenho uma tabela assim:

<rich:dataTable value="#{cadastroBO.tabela}" var="tab" rows = "#{cadastroBO.n}">
    <f:facet name="header">                                                            
        <rich:columnGroup>
              <rich:column>
                  <h:outputText value="Contador"/>                                           
              </rich:column>
              <rich:column>
                  <h:outputText value="Nome"/>                                           
              </rich:column>
              <rich:column>
                  <h:outputText value="Condição"/>                                      
              </rich:column>
              <rich:column>
                  <h:outputText value="Ações"/>                                      
              </rich:column>                                        
                  </rich:columnGroup>
          </f:facet>   
              <h:column>
                  <h:outputText value="#{tab.k}"/>
              </h:column>
              <h:column>
                  <h:outputText value="#{tab.nome}"/>
              </h:column>
              <h:column>
                  <h:outputText value="#{tab.condicao}"/>
               </h:column>
               <h:column>
                    <a4j:commandLink value="Excluir Pessoa" action="#{cadastroBOAction.removeK}"/>
               </h:column>
       </rich:dataTable>

“<a4j:commandLink value=“Excluir Pessoa” action=”#{cadastroBOAction.removeK}"/> "
No método removeK, tem como eu saber em qual linha a pessoa clicou para remover?

11 Respostas

rod

você pode passar o Id do registro que quer remover como parâmetro para a action, assim no método removerK basta recuperar o valor do parâmetro.

<a4j:commandLink value="Excluir Pessoa" action="#{cadastroBOAction.removeK}">
      <f:param name="rowId" value="#{tab.id}" /> 
  </a4j:commandLink>

[]'s

joaosavio

rlazoti:
você pode passar o Id do registro que quer remover como parâmetro para a action, assim no método removerK basta recuperar o valor do parâmetro.

<a4j:commandLink value="Excluir Pessoa" action="#{cadastroBOAction.removeK}">
      <f:param name="rowId" value="#{tab.id}" /> 
  </a4j:commandLink>

[]'s

Valeu cara,

mas como eu pego esse parâmetro?
Pelo FacesContext?

Abraços

D

Cara você poderá recuperar o valor do parametro da seguinte maneira:

FacesContext facesContext = FacesContext.getCurrentInstance();
Map map = facesContext.getExternalContext().getRequestParameterMap();
String codigoSelecionado = (String)map.get("rowId");

abs,

joaosavio

Entao, fiz isso aqui:

...
FacesContext facesContext = FacesContext.getCurrentInstance();  
Map map = facesContext.getExternalContext().getRequestParameterMap();  
String codigo = (String)map.get("rowId");  

int i = Integer.parseInt(codigo); 

tabela.remove(i);
...

ta dando erro

java.lang.NumberFormatException: null

Esse rowId seria um int ok?

D

Cara tem certeza de que está passando o campo correto no parametro, pois este erro ocorre por que o parametro está fazio.

procure debugar o código e verificar qual valor está chegando no momento do get.

Verifique tambem se a propriedade que você está passando, está correta ou está com o valor esperado.

<a4j:commandLink value="Excluir Pessoa" action="#{cadastroBOAction.removeK}">   
    <f:param name="rowId" value="#{tab.id}" />
</a4j:commandLink>

o atributo #{tab.id} está correto ???

pelo seu código me parece que o correto é ="#{tab.k}"

abs,

joaosavio

entao o atributo é “#{tab.k}”

FacesContext facesContext = FacesContext.getCurrentInstance();

Map map = facesContext.getExternalContext().getRequestParameterMap();

String codigo = (String)map.get(rowId);

System.out.println(codigo);

esta retornando null

D

Cara ao Invés de Commandlink tente:

<a4j:support event="onclick" action="#{cadastroBOAction.removeK}">
        <f:param name="rowId" value="#{tab.k}"/>
</a4j:support>

Outra coisa: você consegue ver o valor do atributo “#{tab.k}” na tela ???

abs,

joaosavio

ola pessoas

agora “do nada” foi

Abraços

mateusprado

ola joaosavio, tudo bem?
Vc pode postar o seu metodo excluir?

joaosavio
//remove linha da tabela
    public String removeK() {
        BCadastroBO bCadBO = new BCadastroBO();
        bCadBO = (BCadastroBO) ManagedBean.getContextInfo("#{cadastroBO}"); //pego o bean da sessao
        
        if (bCadBO.getTabela().size() > 0) { 
            FacesContext facesContext = FacesContext.getCurrentInstance();  
            Map map = facesContext.getExternalContext().getRequestParameterMap();  
            String codigo = (String)map.get("rowId");
            System.out.println(codigo);
            int i = Integer.parseInt(codigo); 
            
            tabela.remove(i-1);
            n--;
            
            BCadastroBO bCad = new BCadastroBO();
            bCad.setN(n);
            bCad.setTabela(tabela);   
            ManagedBean.setContextInfo("#{cadastroBO}", bCad); //seto o bean da sessao            
        }        
        
        return "cadastrarBO"; //retorna para mesma pagina
    }

Agora ta funfando

Abraços e valeu

T

Olá pessoal...

Meu problema é exatamente esse mas nao quer funcionar de jeito nenhum.. tentei um monte de coisa já...
Nao quer chamar o metodo na logica de jeito nenhum... será que vcs podem dar uma olhadinha no meu codigo e ver se tem algo errado?

segue...
<h:form id="frmGridItem">
<h:inputHidden id="txtIdAndamento2" value="#{itemAndamentoHandler.andamento.id}"/>
<rich:dataTable id="tbItem" styleClass="tableCenter" value="#{itemAndamentoHandler.itemAndamentoTable}" var="itemAndamento" rows="10">
	<f:facet name="header">
		<rich:columnGroup>
			<rich:column>
				<h:outputText value="NOME" />
			</rich:column>
			<rich:column>
				<h:outputText value="TIPO ITEM" />
			</rich:column>
			<rich:column>
				<h:outputText value="TIPO VALOR" />
			</rich:column>
			<rich:column>
				<h:outputText value="AÇÕES" />
			</rich:column>
			<rich:column>
				<h:outputText value="AÇÕES2" />
			</rich:column>
		</rich:columnGroup>
	</f:facet>									
	
	<h:column headerClass="th_nome">
		<h:outputText value="#{itemAndamento.nome}" />
	</h:column>
					
	<h:column headerClass="th_tipoItem">										
		<h:outputText value="#{itemAndamento.tipoItem.nome}"></h:outputText>
	</h:column>	
	
	<h:column headerClass="th_codigo">										
		<h:outputText value="#{itemAndamento.tipoValorItem.nome}"></h:outputText>
	</h:column>	
	
	<h:column>
		<a4j:commandLink value="Editar"	action="#{itemAndamentoHandler.editarItemAndamento}" />										
	</h:column>
	
								

</rich:dataTable>

</h:form>
e meu metodo tá assim :
public void editarItemAndamento(){     
    Map<String,String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();     
    String idItemAndamento = params.get("idItemAndamento");   
               
    if(idItemAndamento != null && !idItemAndamento.isEmpty()){   
        this.itemAndamento = acaoLogic.getItemAndamentoDAO().load((Long.parseLong(idItemAndamento)));   
    }   
           
}

Minha intenção é carregar um form com um objeto do bean para ser editado.

Agradeço a atenção!

Abração

Criado 25 de agosto de 2008
Ultima resposta 30 de dez. de 2009
Respostas 11
Participantes 5