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 )
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…