Hello everyone,

I am facing an issue while using ajaxFormLoop:

On my page, I fill a form that includes among others a list of phoneNumbers
to be set in an ajaxFormLoop. Once I submit the form, it generates a PDF
(containing data from my form) and makes the user download it in his web
browser. The user is not redirected to another page, the page is simply
reloaded so that the user can fill once again the form and generate a new
PDF.

Problem is that once the page is reloaded (and my PDF file asked to be
download), I cannot use the ajaxFormLoop anymore: if I click on addRow,
nothing happens on the GUI. However if I reload manually the page, the
ajaxFormLoop works back again and displays moreothers as many rows as I
clicked previously on the addRow button. It seems that once I click on
addRow, requests are indeed done server side, but the javaScript doesn't
work anymore and and does not refresh the GUI and show the added rows.

The problem might occur because in the function handling the submit event,
I return a PDFStreamResponse instead of the tapestry page but I don't see
how to solve it.. Return the PDFStreamResponse and somehow reload
immediately after the page, but how? Is there a better way to make the user
download the generated PDF?


the ajaxFormLoop from the tml

<div t:type="ajaxformloop" t:id="phoneNumberLoop" t:value="phoneNumberRow"
t:source="phoneNumberList" t:encoder="phoneNumberRowEncoder">
 <t:unless t:test="phoneNumberRow.toDelete">
<t:submitnotifier>
 <t:layout.twocolumn padding="0" rightColumnWidth="20">
<p:leftColumn>
 <p>
<t:label for="phoneNumber">
${sharedcatalog:phoneNumber}
 </t:label>
<t:textfield t:id="phoneNumber" t:value="phoneNumber" t:validate="required"
/>
 </p>
</p:leftColumn>
<p:rightColumn>
 <p>
<t:removerowlink>
${sharedcatalog:deletephoneNumber}
 </t:removerowlink>
</p>
</p:rightColumn>
 </t:layout.twocolumn>
</t:submitnotifier>
</t:unless>
 <p:addRow>
<div style="clear: both;">
<p>
 <t:addrowlink>
${sharedcatalog:addphoneNumber}
</t:addrowlink>
 </p>
</div>
</p:addRow>
 </div>


the submit event handled in the java class

@OnEvent(component = "myForm", value = EventConstants.SUBMIT)
 public Object generatePDF() {

InputStream pdfStream = null;
 try {
pdfStream = pdfGeneratorService.generateMandatePDF();
} catch (PDFGeneratorServiceException e) {
 e.printStackTrace();
}

// return the PDF as a PDFStreamResponse
 return new PDFStreamResponse(pdfStream, "Addresses_" +
System.currentTimeMillis() + ".pdf");
}


Thanks in advance for the help :),
Jérémie

Reply via email to