Chamar método ao abrir modalPanel [RichFaces]

Iai pessual,

estou usando o componente rich:modalPanel do richFaces, mas estou com um pequeno problema.

A situação é a seguinte: tenho um listagem de determinados registros em um dataTable…e para cada registro tenho um botão…ao clicar nesse botão, é necessário abrir um modalPanel com algumas informações (é uma listagem de certificados digitais, então preciso mostrar algumas informações desse certificado)…ou seja, eu tenho um método no meu MB que faz a lógica de leitura do meu certificado (esta funcionando direitinho), e então depois de executar essa leitura, armazeno o resultado em uma string e essa string é mostrada no meu modalPanel…fiz uma implementação, e funciona meio estranho. Quando clico no botão q executa a lógica e chama o modalPanel, ele até abre, mas por uns 2 segundos e desaparece. E pelos 2 segundos que aparece da pra ver q esta funcionando corretamente. Eu só gostaria que ao clicar continuasse aberto meu modalPanel até eu fechar. Isso começou a ocorrer quando eu coloquei a action com a chamada do método de leitira do certificado no meu commandLink, segue o código:

método do MB (ainda será melhorado)

[code]public String readAttest() {
try {
CertificadoDigital ce = this.getCertificadoDigitalFromList();
ReadAttest ra = new ReadAttest();

        String path = this.getAppContext() + "\\" + ce.getCnpj() + ".p12";
        List<String> list = ra.read(path, ce.getSenha());
        
        if(list.isEmpty()){
            attestInfo = "Nenhuma Informação";
        }else{            
            attestInfo = list.get(0);
        }
    } catch (Exception ex) {
        ex.printStackTrace();
        return "erro";
    }
    return "sucesso";
}[/code]

no jsp dentro do dataTable:

<rich:column width="5%" style="text-align:center"> <f:facet name="header"> <h:outputText value="Detalhes" /> </f:facet> <h:commandLink styleClass="tdLink" action="#{certificadoDigitalBean.readAttest}" id="linkModal"> <h:outputText value="Detalhes" /> <rich:componentControl for="panelModal" attachTo="linkModal" operation="show" event="onclick"/> </h:commandLink> </rich:column>

dentro do jsp meu modalPanel:

<rich:modalPanel id="panelModal" width="350" height="100"> <f:facet name="header"> <h:panelGroup> <h:outputText value="Detalhes do Certificado Digital"></h:outputText> </h:panelGroup> </f:facet> <f:facet name="controls"> <h:panelGroup> <h:graphicImage value="/images/close.png" style="cursor:pointer" id="hidelink"/> <rich:componentControl for="panelModal" attachTo="hidelink" operation="hide" event="onclick"/> </h:panelGroup> </f:facet> <h:outputText value="#{certificadoDigitalBean.attestInfo}"></h:outputText> </rich:modalPanel>

o modalPanel e o método creio q estejam certos, oq eu acho q precisa fazer de outro jeito é a chamada do método para carregar a leitura do arqquivo…

alguem pode me dar uma força?
vlw

Olá,

O que me parece é que como vc está usando um h:commandLink, a página está sendo submetida para disparar a action e ao mesmo tempo vc está abrindo o modalPanel.

Sugiro o seguinte, substitua o seu h:commandLink para um a4j:commandLink, mais ou menos assim:

<a4j:commandLink action="#{certificadoDigitalBean.readAttest}" oncomplete=“Richfaces.showModalPanel(panelModal);”/>

A idéia aqui é quando a ação, invocada via ajax , for finalizada o modalPanel será exibido. Isto deve resolver mas como agora vc estará utilizando ajax poderá ter alguns efeitos colaterais no restante da tela (geralmente são fáceis de resolver).

vlw a ajuda ai…

eu substitui o commandLink como vc indicou:

<a4j:commandLink value="Detalhes" action="#{certificadoDigitalBean.readAttest}" oncomplete="javascript:Richfaces.showModalPanel('panelModal')"/>

porem agora não mostra a informação no meu modalPanel…ele aparece, mantem aberto (como é esperado), mas não mostra…

[code]public String readAttest() {
try {
CertificadoDigital ce = this.getCertificadoDigitalFromList();
ReadAttest ra = new ReadAttest();

        String path = this.getAppContext() + "\\" + ce.getCnpj() + ".p12";
        List<String> list = ra.read(path, ce.getSenha());
        
        if(list.isEmpty()){
            this.setAttestInfo("Nenhuma Informação");
            System.out.println(attestInfo);
        }else{            
            this.setAttestInfo(list.get(0));
            System.out.println(attestInfo);
        }
    } catch (Exception ex) {
        ex.printStackTrace();
        return "erro";
    }
    return "sucesso";
}[/code]

e o método esta retornando corretamente…pois o System.out imprime o valor esperado…

alguem sabe oq pode ser?..será q tem algo a ver com o scope do MB…q por sinal esta session…pq aparentemente ele chama o método, seta o valor na variavel, porem ele limpa o valor da variavel de alguma forma q eu desconheço…

alguem pode dar uma força?
vlw

Olá,

Tem que mandar re-renderizar o modal panel, tente o seguinte:

[code]

<a4j:commandLink value=“Detalhes” action="#{certificadoDigitalBean.readAttest}"
oncomplete=“javascript:Richfaces.showModalPanel(‘panelModal’)” reRender=“panelModal” />[/code]

vlw amigo…

acabei de resolver o problema…era exatamente isso, precisava renderizar…ja ia postar aki…rsrs

mas vlw a ajuda

Essa dica é boa mesmo … Parabens !!! Me ajudou aqui tb =)