Problema com popup jsf + iceface

4 respostas
S

Tenho uma aplicação jsf x icefaces e preciso incluir um popup de confirmação de processamento (incluir, alterar, excluir), alem disso, ainda preciso validar se o processo pode ser executado ou não, no caso de exclusao (verificar se existe registro filho no banco).

criei os seguintes codigos:

jspx de chamada de exclusao:

...
                        <ice:outputText value=" / "/>
                    <ice:commandLink disabled="#{CardapioFace.selectedFuncionalidade.excluir}" action="#{PopupFace.openPopup}" value="excluir">
                        <f:setPropertyActionListener target="#{CardapioFace.selectedCardapio}" value="#{item}"/>
                        <f:setPropertyActionListener value="#{CardapioFace}" target="#{PopupFace.obj}"/>
                        <f:setPropertyActionListener value="removeCardapio" target="#{PopupFace.metodo}"/>
                        <f:setPropertyActionListener value="excluir" target="#{PopupFace.processo}"/>
                        <f:setPropertyActionListener value="cardapio" target="#{PopupFace.tabela}"/>
                        <f:setPropertyActionListener value="#{CardapioFace.selectedCardapio.idCardapio}" target="#{PopupFace.idObj}"/>
                        <ui:include src="popupConfirma.jspx"></ui:include>
                    </ice:commandLink>
                </ice:column>
            </ice:dataTable>
...

CardapioFace.removeCardapio:

...
    public String removeCardapio() {
            System.out.println("CardapioFace.removeCardapio");
            try {
                cardDAO.setUsuarioLogado(usuarioLogado);
                cardDAO.delete(selectedCardapio);
                System.out.println("CardapioFace.removeCardapio - registro excluido");
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(AlimentoFace.class.getName()).log(Level.SEVERE, null, ex);
                FacesContext.getCurrentInstance().addMessage(ex.getMessage(), new FacesMessage(FacesMessage.SEVERITY_INFO, ex.getMessage(), ex.getMessage()));
            } catch (SQLException ex) {
                Logger.getLogger(AlimentoFace.class.getName()).log(Level.SEVERE, null, ex);
                FacesContext.getCurrentInstance().addMessage(ex.getMessage(), new FacesMessage(FacesMessage.SEVERITY_INFO, ex.getMessage(), ex.getMessage()));
            }
            msg = "registro excluido com sucesso!";
            FacesContext.getCurrentInstance().addMessage(msg, new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg));
            return regraNaveg;
    }
...

PopupFace - regra de negocio da visualização ou não do popup:

...

public class PopupFace {

    private String msg = null;
    private String processo = null;
    private String metodo = null;
    private Class cl = null;
    private Object obj = null;
    private Method met = null;
    //private Method regraNaveg;
    private String tabela = null;
    private Boolean chamaMetodo = null;
    private VerificaConstraintDAO verifDAO = new VerificaConstraintDAO();
    private Boolean verRegFilho = null;
    private int idObj;

    private boolean visible = false;

    public boolean isVisible() {
        return visible;
    }

    public void setVisible(boolean visible) {
        this.visible = visible;
    }

    public void setChamaMetodo() throws ClassNotFoundException, SQLException {
        System.out.println("PopupFace.setChamaMetodo");
        if (processo.equals("excluir")) {
            System.out.println("PopupFace.setChamaMetodo.excluir");
            verifDAO.verifica(tabela, idObj);
            verRegFilho = StringToBoolean.parse(verifDAO.getRegistroFilho());

            if (verRegFilho == true) {
                msg = verifDAO.getMsg();
                chamaMetodo = false;
            } else
                chamaMetodo = true;
        } else
            chamaMetodo = true;
    }

//    public boolean isVisible() { return visible; }
//
//    public void setVisible(boolean visible) { this.visible = visible; }

//    public void closePopup() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
//        System.out.println("closePopup entrou");
//        setVisible(false);
//        System.out.println("closePopup isVisible: " + visible);
////        regraNaveg.invoke(obj);
////        System.out.println("closePopup invoke - regraNaveg");
//        processo = null;
//        metodo = null;
//        System.out.println("closePopup fim");
//    }

    public void openPopup() throws ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, SQLException {
        System.out.println("PopupFace.openPopup");
        instanciaClasse();
        setChamaMetodo();
        if (verRegFilho == false) {
            setMsgConfirma();
        } else
        System.out.println("PopupFace.openPopup - metodo: " + metodo);
        System.out.println("PopupFace.openPopup - obj: " + obj.getClass().getName());
        System.out.println("PopupFace.openPopup - verRegFilho " + verRegFilho);
        System.out.println("PopupFace.openPopup - msg " + msg);
        visible = true;
    }

    public void setMsgConfirma() {
        msg = "tem certeza que deseja " + processo + " o registro selecionado?";
    }

    public void instanciaClasse() throws ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException {
            System.out.println("instanciaClasse - obj: " + obj.getClass().getName());
            met = obj.getClass().getMethod(metodo);
//            regraNaveg = obj.getClass().getMethod("regra");
    }

    public void confirmaComando() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        try {
            System.out.println("confirmaComando - obj: " + obj.getClass().getName());
            System.out.println("confirmaComando - met: " + met.getName());
            if (chamaMetodo == true) {
                System.out.println("confirmaComando chamaMetodo == true");
                met.invoke(obj);
                //closePopup();
            }
            System.out.println("confirmaComando chamaMetodo == false");
        } catch (IllegalAccessException ex) {
            Logger.getLogger(PopupFace.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalArgumentException ex) {
            Logger.getLogger(PopupFace.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InvocationTargetException ex) {
            Logger.getLogger(PopupFace.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            //closePopup();
            System.out.println("confirmaComando.finally.antes - visible: " + visible);
            System.out.println("confirmaComando.finally.antes - processo: " + processo);
            System.out.println("confirmaComando.finally.antes - metodo: " + metodo);
            System.out.println("confirmaComando.finally.antes - msg: " + msg);
            System.out.println("confirmaComando.finally.antes - cl: " + cl);
            System.out.println("confirmaComando.finally.antes - obj: " + obj);
            System.out.println("confirmaComando.finally.antes - met: " + met);
            System.out.println("confirmaComando.finally.antes - tabela: " + tabela);
            System.out.println("confirmaComando.finally.antes - chamaMetodo: " + chamaMetodo);
            System.out.println("confirmaComando.finally.antes - verifDAO: " + verifDAO);
            System.out.println("confirmaComando.finally.antes - verRegFilho: " + verRegFilho);
            setVisible(false);
            processo = null;
            metodo = null;
            msg = null;
            cl = null;
            obj = null;
            met = null;
            tabela = null;
            chamaMetodo = null;
            verifDAO = null;
            verRegFilho = null;
            System.out.println("confirmaComando.finally - visible: " + visible);
            System.out.println("confirmaComando.finally - processo: " + processo);
            System.out.println("confirmaComando.finally - metodo: " + metodo);
            System.out.println("confirmaComando.finally - msg: " + msg);
            System.out.println("confirmaComando.finally - cl: " + cl);
            System.out.println("confirmaComando.finally - obj: " + obj);
            System.out.println("confirmaComando.finally - met: " + met);
            System.out.println("confirmaComando.finally - tabela: " + tabela);
            System.out.println("confirmaComando.finally - chamaMetodo: " + chamaMetodo);
            System.out.println("confirmaComando.finally - verifDAO: " + verifDAO);
            System.out.println("confirmaComando.finally - verRegFilho: " + verRegFilho);
        }
    }
...

VerificaConstrintDAO - Verifica no banco a existencia de registro filho:

...
public class VerificaConstraintDAO extends DataBaseUtil {

        private static final long serialVersionUID = 1L;
        private String registroFilho;
        private String msg;
        private List lista = new ArrayList();

    public VerificaConstraintDAO() {
        super();
    }

    public boolean verifica(String tabela, int idPrimary) throws ClassNotFoundException, SQLException {
        // crio a chamada da procedure
        CallableStatement ps = (CallableStatement) getCallableStatement ("" +
                "{call PRC_VERIFICA_CONSTRAINT(?,?,?,?)}");
            ps.setString(1, tabela);
            ps.setInt(2, idPrimary);
            // registro parametros de saida - OUT
            ps.registerOutParameter (3 , java.sql.Types.VARCHAR) ;
            ps.registerOutParameter (4 , java.sql.Types.VARCHAR) ;
            // executo a chamada
            boolean toReturn = ps.execute();
            // recebo os parametros de saida - OUT
            registroFilho = ps.getString(3);
            msg = ps.getString(4);
            System.out.println("VerificaConstraintDAO.verifica - tabela: " + tabela + " - idPrimary: " + idPrimary +
                    "registroFilho: " + registroFilho + " - msg: " + msg);
            ps.close();
        return toReturn;
    }
...

O problema é que quando tenho registros em tabelas filhas, o popup não fecha ao clicar em ok, ai invés disso, ele reabre várias vezes…
Alguem tem idéia do que pode causar este problemas?

Att:
José Luiz

4 Respostas

S

alguém consegue ajudar nisso? alguma dica?

Att:
José Luiz

S

pessoal… alguém ajuda??

ViniGodoy

Por favor, ao postar tópicos, não peça socorro ou urgência nos títulos.

S

Valeu pela dica ViniGodoy. Mas ainda estou sem solução pro problema. Alguém já passou por algo parecido que possa dar uma luz???

Criado 29 de março de 2012
Ultima resposta 21 de abr. de 2012
Respostas 4
Participantes 2