Datatable MyFaces (tomahawk)

Bom dia Pessoal!

Começei a usar o JSP a pouco tempo (tb programo a pouco tempo, então não se irritem se a dúvida for besta :grin: )

Tenho um Datatable que está me retornando os usuários do sistema. Eu coloquei um commandLink onde eu preciso que quando a pessoa clique nele, preencha os meus campos de cadastro para a edição do usuário daquela linha. O que está acontecendo é que em qq linha que eu clique no commandlink, me é retornado o último registro do Datatable.

Aqui está o meu t:DataTable :


<t:dataTable var="usuario" value="#{usuarioManaged.usuarios}" 
						 binding="#{usuarioManaged.dataTable}"
						 rowClasses="bg_branco,bg_amarelo"
						 headerClass="headerclass"
				 		 styleClass="tabela"
				 		 cellspacing="0"
				                 cellpadding="4"
				                 preserveDataModel="true">
				         
				
					<h:outputText value="Lista de Usuários Cadastrados" styleClass="cabecalho"/>
				         
				<h:column>
					<f:facet name="header">
						<h:outputText value="nomeUsuario" />
					</f:facet>
					<h:outputText value="#{usuario.nomeUsuario}" />
				</h:column>
				<h:column>
					<f:facet name="header">
						<h:outputText value="Nome" />
					</f:facet>
					<h:outputText value="#{usuario.nome}" />
				</h:column>
				<h:column>
					<f:facet name="header">
						<h:outputText value="Categoria" />
					</f:facet>
					<h:outputText value="#{usuario.categoria}" />
				</h:column>
				<h:column>
					<f:facet name="header">
						<h:outputText value="" />
					</f:facet>
					<h:commandLink action="#{usuarioManaged.editar}">
						<t:updateActionListener property="#{usuarioManaged.usuario}" value="#{usuario}" />
						<h:outputText value="Editar" />
					</h:commandLink>
				</h:column>
</t:dataTable>

Meu Backing Bean está assim:


public class UsuarioManaged {
	
	public Usuario usuario = new Usuario();
	public GerenciadorUsuarios gerenciadorUsuarioManaged ;
	public HtmlDataTable dataTable;
	
	public UsuarioManaged(){
	
	}
//--------------------------------------------------------------------------
	
//--------------------------------------------------------------------------	
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	public Usuario getUsuario() {
		return usuario;
	}
//--------------------------------------------------------------------------
	
//--------------------------------------------------------------------------		
	public void setGerenciadorUsuarioManaged(
			GerenciadorUsuarios gerenciadorUsuarioManaged) {
		this.gerenciadorUsuarioManaged = gerenciadorUsuarioManaged;
	}
	
	public GerenciadorUsuarios getGerenciadorUsuarioManaged() {
		return gerenciadorUsuarioManaged;
	}
//--------------------------------------------------------------------------
	
//--------------------------------------------------------------------------
	public List getUsuarios(){
	       return gerenciadorUsuarioManaged.getUsuarios();
      
	}
	
	public String salvarOuAlterarUsuario(){
		gerenciadorUsuarioManaged.criarOuAlterarUsuario(usuario);
		this.setUsuario(new Usuario());
		return null;
	}
	
	public String apagarUsuario(){
		gerenciadorUsuarioManaged.apagarUsuario(usuario);
		return null;
	}
	 
   public String editar() {
        	return null;
    }

   public HtmlDataTable getDataTable() {
	       return dataTable;
   }
   public void setDataTable(HtmlDataTable dataTable) {
	      this.dataTable = dataTable;
}
	
//--------------------------------------------------------------------------	


   
}

Eu percebi que na verdade quando eu clico no meu Editar, a página é submetida novamente e o objeto que é mostrado na tela pra eu alterar é o último objeto do meu List de usuários que é pego pelo método getUsuarios. Eu imaginei que quando eu clicasse no link, ele me retornaria o objeto referente àquela linha…

Alguém sabe como posso resolver isso ?

Obrigado!!

Douglas Grava

Obs: Pra fazer isso eu utilizei um exemplo que peguei na net… por isso que eu usei o DataTable do Tomahawk… se houver uma solução usando o DataTable da biblioteca HTML do JSP mesmo pra mim tanto faz… :grin:

utilize o parâmetro value binding deste componente para setar valor a um UIData que você deve criar para pegar os valores… aí com um getSelectedRow() você pega esta linha selecionada.

:okok:

E aí Marcos!

Meu, era por aí mesmo… como eu não sei muito ainda de JSF eu tava comendo bola… eu criei um DataModel e funcionou direitinho…
Usei o h:dataTable ao invés do t:dataTable… tá :skol: agora!!

Valeu pela ajuda!

Abraço

Douglas :metalero: