Olá, GUJ!
Estou com um problema que não encontrei uma solução adequada. Estou com um simples CRUD, onde através de um <h:datatable> são exibidos os registros vindos do BD e há um botão onde eu clico para renderizar o <h:inputtext> quando eu quiser alterá-lo. Porém não consigo fazer com que o o registro selecionado fique editável.
<h:dataTable value="#{contatoMB.listarContato}" var="c">
<h:column>
<f:facet name="header">Nome</f:facet>
<h:inputText value="#{c.nome}" rendered="#{contatoMB.contato.editavel}" />
<h:outputText value="#{c.nome}" rendered="#{not contatoMB.contato.editavel}" />
</h:column>
<h:commandButton value="Alterar" action="#{contatoMB.editarContato(c)}" rendered="#{not contatoMB.contato.editavel}" />
ManagedBean
package contato;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import dao.ContatoDao;
@ManagedBean
public class ContatoMB {
private Contato contato;
private List<Contato> contatoLista;
public ContatoMB(){
contato = new Contato();
}
public List<Contato> getListarContato() throws ClassNotFoundException, SQLException {
contatoLista = new ContatoDao().listarContato();
return contatoLista;
}
public Contato getContato() {
return contato;
}
public void setContato(Contato contato) {
this.contato = contato;
}
public void adicionarContato() throws ClassNotFoundException, SQLException {
ContatoDao cd = new ContatoDao();
cd.adicionarContato(getContato().getNome(),
getContato().getTelefoneFixo(),
getContato().getTelefoneCelular());
this.contato = new Contato();
return;
}
public void removerContato(Contato c) throws ClassNotFoundException, SQLException{
ContatoDao cd = new ContatoDao();
cd.removerContato(c.getId());
return;
}
public String salvarAlteracao(Contato c) throws ClassNotFoundException, SQLException{
ContatoDao cd = new ContatoDao();
cd.alterarContato(c.getNome(),
c.getTelefoneFixo(),
c.getTelefoneCelular());
for (Contato contato : contatoLista) {
c.isEditavel(false);
}
return null;
}
public String editarContato(Contato c) {
//getContato().isEditavel(true);
c.isEditavel(true);
return null;
}
}
Contato
package contato;
public class Contato {
private int id;
private String nome;
private String telefoneFixo;
private String telefoneCelular;
private boolean editavel = false;
public Contato(){}
public Contato(int id, String nome){
this.id = id;
this.nome = nome;
}
public Contato(String nome){
this.nome = nome;
}
public boolean isEditavel() {
return editavel;
}
public void isEditavel(boolean editavel) {
this.editavel = editavel;
}
public String getTelefoneFixo() {
return telefoneFixo;
}
public void setTelefoneFixo(String telefoneFixo) {
this.telefoneFixo = telefoneFixo;
}
public String getTelefoneCelular() {
return telefoneCelular;
}
public void setTelefoneCelular(String telefoneCelular) {
this.telefoneCelular = telefoneCelular;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}