Duvida com rich:dataTable

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?

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

[quote=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[/quote]

Valeu cara,

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

Abraços

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,

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?

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,

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

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,

ola pessoas

agora “do nada” foi

Abraços

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

//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

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 :

[code]
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)));   
}   

} [/code]

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

Agradeço a atenção!

Abração