L’étape suivante consiste à créer un servlet qui effectuera le rendu du formulaire adaptatif avec les données enregistrées et ses pièces jointes.
Le code de servlet suivant est exécuté après vérification du code OTP. Les données du formulaire adaptatif et son mappage de pièces jointes associé à l’ID d’application unique sont récupérés de la base de données. L’objet de requête est renseigné avec les données de formulaire adaptatif enregistrées et le mappage des pièces jointes. La demande est ensuite transmise pour que le formulaire "storeafwithattachments" soit prérenseigné avec les données d’origine et ses pièces jointes.
package store.and.fetch.core.servlets;
import java.io.IOException;
import java.io.StringReader;
import javax.servlet.RequestDispatcher;
import javax.servlet.Servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathExpressionException;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.json.JSONException;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import com.day.cq.wcm.api.WCMMode;
import store.and.fetch.core.*;
@Component(service = {
Servlet.class
}, property = {
"sling.servlet.methods=post",
"sling.servlet.paths=/bin/renderaf"
})
public class RenderForm extends SlingAllMethodsServlet {
/**
*
*/
private static final Logger log = LoggerFactory.getLogger(RenderForm.class);
private static final long serialVersionUID = 1 L;
@Reference
AemFormsAndDB aemFormsAndDB;
public org.w3c.dom.Document w3cDocumentFromStrng(String xmlString) {
try {
log.debug("Inside w3cDocumentFromString");
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(xmlString));
return db.parse(is);
} catch (Exception e) {
log.debug(e.getMessage());
}
return null;
}
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) {
log.debug("*****In my Render Form Servlet*****");
String submittedData = request.getParameter("jcr:data");
String applicationNo = "/afData/afUnboundData/data/ApplicationNumber";
org.w3c.dom.Document submittedXml = w3cDocumentFromStrng(submittedData);
XPath xPath = javax.xml.xpath.XPathFactory.newInstance().newXPath();
try {
org.w3c.dom.Node applicationNode = (org.w3c.dom.Node) xPath.compile(applicationNo).evaluate(submittedXml, javax.xml.xpath.XPathConstants.NODE);
log.debug("The application number we got was " + applicationNode.getTextContent());
org.json.JSONObject afDataObject = aemFormsAndDB.getAFFormDataWithAttachments(applicationNode.getTextContent());
log.debug("The data I got was " + afDataObject.toString());
request.setAttribute("data", afDataObject.get("afData"));
org.json.JSONObject customMap = new org.json.JSONObject();
customMap.put("fileAttachmentMap", afDataObject.get("afAttachments"));
request.setAttribute("customContextProperty", customMap.toString());
ServletContext sc = getServletContext();
RequestDispatcher dispatcher = sc.getRequestDispatcher("/content/forms/af/storeafwithattachments.html");
WCMMode.DISABLED.toRequest(request);
dispatcher.forward(request, response);
} catch (JSONException | ServletException | IOException | XPathExpressionException e) {
log.debug("The error message is " + e.getMessage());
}
}
}