0

My problem is that the backing bean method #{infomappeController.sendInfomappeAsMail} is immediately called and doesn't wait for the javascript function createpdfresource() to return the correct parameter (which should be an url).

My Question:

  • How could you assure that my backing method waits until the javascript method has finished ?
  • Could you do it via JSF ?

xhtml file (code snippet):

<!-- TODO: backing bean method-call doesn't wait for javascript function to finish which as a result returns an incomplete url -->                     
<h:commandButton class="sendInfoMapAsEmail noMarginLeft"
                 id="sendInfoMapAsEmail"
                 value="Als Email versenden"
                 actionListener="#{infomappeController.sendInfomappeAsMail}">   
    <f:ajax render=":emailStatusMessage" />                                 
</h:commandButton>      

javascript method:

$(".sendInfoMapAsEmail").click(createpdfresource);
function createpdfresource(e){
    e.preventDefault();     
    var cleanurl = $('.cleanurl').attr('href');
    var clientId = $('.clientId').val();
    var formId = "#"+clientId+"\\:infofolderForm";
    var seralizedform = $(formId).serialize();
    var pdfurl = cleanurl + "&" + seralizedform + "&contentType=pdf";
    var hiddenResource = formId + '\\:pdfresource';
    $(hiddenResource).val(pdfurl);       
}  

backing bean method:

public void sendInfomappeAsMail() {
    //Mailer mailer = new Mailer();     
    FacesContext context = FacesContext.getCurrentInstance();
    String beraterEmail="";
    try {
        beraterEmail = themeDisplay.getRealUser().getEmailAddress();
    } catch(Exception e){
        logger.error("sendInfomappeAsMail: no EmailAdress for "+themeDisplay.getRealUser(),e);
    }

    mailer.sendMail(beraterEmail, pdfresource);

    if(mailer.isWasEmailSentSuccessfully()) {
        FacesMessage successMessage = new FacesMessage(FacesMessage.SEVERITY_INFO,"Infomappe erfolgreich versendet.", null);
        context.addMessage(null, successMessage);
    } else {
        FacesMessage errorMessage = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Fehler beim Versenden der Infomappe.", null);
        context.addMessage(null, errorMessage);

    }
}

Thanks a lot for your help.

HelmutSteiner
  • 99
  • 2
  • 11

0 Answers0