Fala ai pessoal estou com um problema que esta me deixando louco, pois não consigo de forma alguma achar o erro e tão pouco a solução, vou explicar a situação: estou desenvolvendo um sistema simples que praticamente todo ele funciona somente com CRUD estou usando JSF 2 + primefaces 3.5 + banco de dados MYSQL. tenho uma classe DAO onde programei toda a persistencia com o banco de dados, tenho uma classe MANAGEDBEAN que é onde eu programei toda ação da interface do usuario (métodos que invocam os métodos da classe DAO para persistencia) e lógico as telas, em uma dessas telas tenho uma DATATABLE que exibe toda a lista do que ja tenho no banco de dados, e nessa DATATABLE também coloquei os botões para editar e excluir cada elemento da tabela, também tenho uma tela para adicionar novos elementos. Beleza agora vem os problemas: as ações de listar a tabela e de adicionar elementos estão funcionando corretamente, porém não consigo editar os elementos e nem excluir os mesmos. na função de editar tudo ocorre normalmente, não da nenhum erro, mas nada acontece e na função excluir é como se o valor do atributo do objeto passado como parametro para exclusao não estivesse sendo lido, mas não é lançada nenhuma exceção recebo a mensagem que o objeto foi excluido só que na verdade nada acontece. Ah estou usando um servidor GLASSFISH 3.1.2. segue abaixo o código:
A classe DAO:
public class TonerDAO {
private Connection con;
private Statement stm;
public void conectar(){
try {
con = new ConnectionFactory().getConnection();
stm = con.createStatement();
System.out.println("conectado");
} catch (SQLException e) {
throw new RuntimeException(e);
} catch (NamingException e) {
throw new RuntimeException(e);
}
}
public void fechar(){
try {
stm.close();
con.close();
System.out.println("desconectado");
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public List<Toner> getLista(){
conectar();
try{
ResultSet result = stm.executeQuery("select impressora.modelo, toner.patrimonio, toner.serie, toner.situacao from toner inner join impressora on impressora.id='1' and toner.situacao='NOVO'");
List<Toner> lista = new ArrayList<Toner>();
while(result.next()){
Toner temp = new Toner();
temp.setModelo(result.getString("modelo"));
temp.setPatrimonio(result.getString("patrimonio"));
temp.setSerie(result.getString("serie"));
temp.setSituacao(result.getString("situacao"));
lista.add(temp);
}
result.close();
return lista;
}catch(SQLException e){
throw new RuntimeException(e);
}finally{
fechar();
}
}
public void adicionaToner(Toner ton){
conectar();
System.out.println(ton.getPatrimonio().toUpperCase());
try{
stm.execute("insert into toner (patrimonio, serie, situacao, cor) values ('" + ton.getPatrimonio().toUpperCase() + "','" + ton.getSerie().toUpperCase() + "','"
+ ton.getSituacao().toUpperCase() + "','" + ton.getCor().toUpperCase() + "')");
System.out.println(ton.getPatrimonio().toUpperCase());
}catch(SQLException e){
throw new RuntimeException(e);
}finally{
fechar();
}
}
public void exlcuir(String patrimonio){
conectar();
System.out.println(patrimonio + "1");
System.out.println("tentando exlcuir...");
try {
System.out.println(patrimonio + "2");
stm.execute("delete from toner where patrimonio='" + patrimonio +"';");
System.out.println(patrimonio + "3");
System.out.println("excluido");
} catch (SQLException e) {
System.err.println(e.getMessage());
}finally{
fechar();
}
}
public void atualizar(Toner ton){
conectar();
System.out.println(ton.getPatrimonio() + "dao1");
try {
stm.executeUpdate("update toner set patrimonio='" + ton.getPatrimonio().toUpperCase() + "',serie='" + ton.getSerie().toUpperCase() + "',situacao='"
+ ton.getSituacao().toUpperCase() + "' where patrimonio='" + ton.getPatrimonio().toUpperCase() + "';");
System.out.println(ton.getPatrimonio() + "dao2");
System.out.println("editado ...");
} catch (SQLException e) {
throw new RuntimeException(e);
}finally{
fechar();
}
}
}
A classe MANAGEDBEAN:
@ManagedBean
@SessionScoped
public class TonerBean implements Serializable {
private static final long serialVersionUID = 1135163075951387945L;
private Toner toner = new Toner();
private List<Toner> lista = new ArrayList<Toner>();
private TonerDAO dao = new TonerDAO();
public TonerBean() throws SQLException, NamingException{
toner.setSituacao("NOVO");
lista = dao.getLista();
}
public void adiciona(ActionEvent evt) {
dao.adicionaToner(toner);
lista = dao.getLista();
showMessage("Toner " + toner.getPatrimonio().toUpperCase() + "\n" + "adicionado com sucesso!");
toner = new Toner();
}
public List<Toner> getList() throws SQLException, NamingException{
TonerDAO dao = new TonerDAO();
return dao.getLista();
}
public void remover(){
System.out.println(toner.getPatrimonio() + "bean1");
dao.exlcuir(toner.getPatrimonio());
lista = dao.getLista();
showMessage("Toner " + toner.getPatrimonio() + "\n" + "excluido com sucesso!");
toner = new Toner();
toner.setSituacao("NOVO");
}
public void editar(){
System.out.println(toner.getPatrimonio() + "bean1");
dao.atualizar(toner);
lista = dao.getLista();
showMessage("Toner " + toner.getPatrimonio().toUpperCase() + "\n" + "atualizado com sucesso!");
toner = new Toner();
}
public void showMessage(String summary){
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(summary));
}
public Toner getToner() {
return toner;
}
public void setToner(Toner toner) {
this.toner = toner;
}
public List<Toner> getLista() {
return lista;
}
public void setLista(List<Toner> lista) {
this.lista = lista;
}
}
Tela que tem as ações de editar e excluir:
<h:form id="form">
<p:graphicImage url="/resources/titulo_4260.png"/>
<p:growl id="msg"/>
<br/><br/>
<p:dataTable id="dataTable1" var="print" value="#{tonerBean.getList()}" styleClass="order-table" style="position: relative; left:22%;
width: 60%">
<f:facet name="header">
Lista de Toner Novos
</f:facet>
<p:column headerText="MODELO" style="font-size:15px;">
<h:outputText value="#{print.modelo}" />
</p:column>
<p:column headerText="PATRIMONIO" style="font-size:15px;">
<h:outputText value="#{print.patrimonio}" style="text-transform: uppercase"/>
</p:column>
<p:column headerText="SERIE" style="font-size:15px;">
<h:outputText value="#{print.serie}" style="text-transform: uppercase"/>
</p:column>
<p:column headerText="SITUAÇÃO" style="font-size:15px;">
<h:outputText value="#{print.situacao}" style="text-transform: uppercase"/>
</p:column>
<p:column headerText="AÇÕES" style="font-size:15px;">
<p:commandButton icon="ui-icon-pencil" update=":form:edit" oncomplete="editWidget.show()" title="editar">
<f:setPropertyActionListener target="#{tonerBean.toner}" value="#{print}"/>
</p:commandButton>
<p:commandButton icon="ui-icon-trash" update=":form:removeDialog" oncomplete="removeWidget.show()" title="excluir">
<f:setPropertyActionListener target="#{tonerBean.toner}" value="#{print}"/>
</p:commandButton>
</p:column>
<f:facet name="footer">
Total de toner: #{fn:length(tonerBean.lista)}
</f:facet>
</p:dataTable>
<p:dialog header="Editar Toner" widgetVar="editWidget" resizable="false" modal="true">
<h:panelGrid id="edit" columns="2" cellpadding="4" style="margin:0 auto;">
<p:outputLabel value="PATRIMONIO:" for="patrimonio"/>
<p:inputText id="patrimonio" style="text-transform: uppercase" value="#{tonerBean.toner.patrimonio}"/>
<p:outputLabel value="SERIE: " for="serie"/>
<p:inputText id="serie" style="text-transform: uppercase" value="#{tonerBean.toner.serie}"/>
<p:outputLabel value="Situação: " for="situacao"/>
<p:selectOneMenu id="situacao" value="#{tonerBean.toner.situacao}">
<f:selectItem itemLabel="NOVO" itemValue="NOVO"/>
<f:selectItem itemLabel="EM USO" itemValue="EM USO"/>
<f:selectItem itemLabel="USADO" itemValue="USADO"/>
</p:selectOneMenu>
<p:commandButton value="Editar" icon="ui-icon-check" action="#{tonerBean.editar}" oncomplete="editWidget.hide()" update="dataTable1, msg"/>
</h:panelGrid>
</p:dialog>
<p:confirmDialog id="removeDialog" widgetVar="removeWidget" header="Remover toner"
message="Deseja realmente excluir o toner #{tonerBean.toner.patrimonio}?" severity="alert">
<p:commandButton value="sim" icon="ui-icon-check" action="#{tonerBean.remover}" oncomplete="removeWidget.hide()" update="dataTable1, msg"/>
<!--<p:commandButton value="cancelar" icon="ui-icon-close" onclick="removeWidget.hide()"/>-->
</p:confirmDialog>
</h:form>
Tela para adicionar um novo elemento (lembrando que aqui tudo funciona perfeitamente):
<h:form id="form">
<p:growl id="msg" sticky="true"/>
<p:panel header="NOVO TONER" id="panel" style="width: 50%; position: relative; left: 22%">
<p:messages id="messages"/>
<h:panelGrid columns="4" id="panelg">
<p:outputLabel value="PATRIMONIO:" for="patrimonio"/>
<p:inputText id="patrimonio" style="text-transform: uppercase" value="#{tonerBean.toner.patrimonio}"/>
<p:outputLabel value="SERIE: " for="serie"/>
<p:inputText id="serie" style="text-transform: uppercase" value="#{tonerBean.toner.serie}"/>
<p:outputLabel value="Situação: " for="situacao"/>
<p:inputText id="situacao" style="text-transform: uppercase" value="#{tonerBean.toner.situacao}" disabled="true"/>
<h:inputHidden id="cor" style="text-transform: uppercase" value="#{tonerBean.toner.cor}"/>
<p:commandButton value="adicionar" actionListener="#{tonerBean.adiciona}" update="panelg, msg" style="font-size: 14px">
<f:setPropertyActionListener target="#{tonerBean.toner.situacao}" value="NOVO"/>
<f:setPropertyActionListener target="#{tonerBean.toner.cor}" value="PRETO" />
</p:commandButton>
</h:panelGrid>
</p:panel>
</h:form>