[Resolvido]Dúvida com Crud em JSF e DAO

Pessoal, boa tarde.

Estou com uma dúvida referente a atualização e exclusão de registros de uma tabela com JSF e DAO.

Abaixo segue o meu código.

Método excluir da classe dao.

public void excluir(Admin admin) throws EcommerceDAOException {
		PreparedStatement ps = null;
		Connection con = null;

		if (admin == null)
			throw new EcommerceDAOException("O valor passado não pode ser nulo");
		try {
			con = this.con;
			ps = con.prepareStatement("delete from admin where id=?");
			ps.setInt(1, admin.getId());
			/*ps.setString(2, admin.getNome());
			ps.setString(3, admin.getUser_name());
			ps.setString(4, admin.getUser_pass());*/
			ps.executeUpdate();
		} catch (SQLException e) {
			throw new EcommerceDAOException("Erro ao excluir dados: " + e);
		} finally {
			ConnectionEcommerceFactory.closeConnection(con, ps);
		}

	}

Método excluir da classe bean.

public String excluir() throws EcommerceDAOException{
	InterfaceAdminDao dao = new AdminDao();
	dao.excluir(admin);
	return "sucesso_exc";
}

La no meu dataTable terá uma coluna que vai ser um botão para excluir.

<h:commandButton value="#{adm.id}" action="#{adminBean.excluir()}"
							image="/images/remove.png" />

A minha dúvida é a seguinte, é dessa forma mesmo que passo a id como parâmetro para a exclusão?

Não.

Escolhe um desses 4 modos aqui:

Enquanto mesmo post sobre isso não fica pronto! :stuck_out_tongue:

Boa tarde, passa o objeto que você quer excluir, pegando a linha da tabela. Faça o seguinte.

<h:commandButton title="Excluir" value="Excluir" action="#{adminBean.excluir}" onclick="return confirm('Tem certeza de excluir?');"> <f:setPropertyActionListener target="#{adminBean.admin}" value="#{suavardatabela}" /> </h:commandButton>

Até mais…

Melhor forma é usando OOP!
No JSF vc pode pegar o próprio objeto usado para renderizar as linhas da datatable.
Qualquer bom livro de JSF ensina isso…

faz assim:

Listando os objetos cadastrados

<h:form>
            <h:dataTable value="#{marcaController.marcas}" var="marca" rendered="#{marcaController.marcas.rowCount>0}">
                <h:column>
                    <f:facet name="header">
                        CODIGO
                    </f:facet>
                    <h:outputLabel value="#{marca.id}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        NOME
                    </f:facet>
                    <h:outputLabel value="#{marca.nome}"/>
                </h:column>
                <h:column>
                    <f:facet name="header">
                        OPCOES
                    </f:facet>
                    <h:commandButton value="Consultar" action="#{marcaController.consultar()}"/>
                    &nbsp;
                    <h:commandButton value="Alterar" action="#{marcaController.editar()}"/>
                    &nbsp;
                    <h:commandButton value="Excluir" action="#{marcaController.excluir()}"/>
                </h:column>
            </h:dataTable>

No bean fica assim:

public class MarcaController {

    private MarcaDao marcaDao = new MarcaDao();
    private Marca marca;
    private DataModel marcas;

    public String excluir() {
        getMarcaFromDataModel();
        marcaDao.excluir(marca);
        return "listar";
    }
    
    //Aqui é o que vai no campo values da <h:dataTable>
    public DataModel getMarcas() {
        marcas = new ListDataModel(marcaDao.listar());
        return marcas;
    }

    /*
     * Este metodo é responsavel por pegar o objeto da linha selecionada
     * no datamodel.
     */
    private void getMarcaFromDataModel() {
        marca = (Marca) marcas.getRowData();
    }

Thimor,

Não consigo utilizar o DataModel, inclusive estou comum tópico aberto aqui.

http://www.guj.com.br/java/259043-duvida-com-datamodel-jsf#1351252

Pessoal, Bom dia.

Consegui finalizar o CRUD utilizando o DataModel.

Obrigado a todos pela ajuda.

Coloca aqui a solução encontrada para ajudar outros.

No meu Bean eu coloquei os seguintes métodos.

	public class CategoriaBean {
	
	private Categoria categoria = new Categoria();
	private DataModel model;
	
    //Lista todos os registros
	public DataModel getTodas() throws EcommerceDAOException{
	InterfaceCategoriaDao dao = new CategoriaDAO();
	model = new ListDataModel(dao.categorias());
	return model;
	}
	//Exibe o registro selecionado em um form utilizando a string de retorno para fazer o redirect
	public String editar(){
		Categoria categoria = getCatFromEditOrDelete();
	setCategoria(categoria);
		return "altCategoria";
	}
       
	public String excluir() throws EcommerceDAOException{
		InterfaceCategoriaDao dao = new CategoriaDAO();
		Categoria categoria = getCatFromEditOrDelete();
		dao.excluir(categoria);
		return "sucesso_exe";
	}
	//Atualiza o registro selecionado
	public String update() throws EcommerceDAOException{
		InterfaceCategoriaDao dao = new CategoriaDAO();
		dao.atualizar(categoria);
		return "sucesso_update";
	}
    //Seleciona o registro para atualizar ou excluir
	public Categoria getCatFromEditOrDelete(){
		Categoria categoria = (Categoria) model.getRowData();
		return categoria;
	}

	
}