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