데이터베이스에 제출된 데이터 저장

노트

JSON 데이터 유형에 대한 지원이 있으므로 MySQL 8을 데이터베이스로 사용하는 것이 좋습니다. MySQL DB에 적합한 드라이버를 설치해야 합니다. 이 위치 https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.12에 있는 드라이버를 사용했습니다.

제출된 데이터를 데이터베이스에 저장하기 위해 바인딩된 데이터와 양식 이름을 추출하고 저장하는 서블릿을 작성합니다. 양식 제출을 처리하고 afBoundData를 데이터베이스에 저장하는 전체 코드가 아래에 나와 있습니다.

양식 제출을 처리하기 위해 사용자 정의 제출을 만들었습니다. 이 사용자 지정 제출의 post.POST.jsp에서 요청을 Adobe 서블릿에 전달합니다.

사용자 지정 제출 서류에 대한 자세한 내용은 다음 문서를 참조하십시오 문서

com.adobe.aemds.guide.utils.GuideSubmitUtils.setForwardPath(slingRequest,"/bin/storeafsubmission",null,null);

package com.aemforms.json.core.servlets;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.sql.DataSource;

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.json.JSONObject;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component(service = Servlet.class, property = {

"sling.servlet.methods=get", "sling.servlet.methods=post",

"sling.servlet.paths=/bin/storeafsubmission"

})
public class HandleAdaptiveFormSubmission extends SlingAllMethodsServlet {
 private static final Logger log = LoggerFactory.getLogger(HandleAdaptiveFormSubmission.class);
 private static final long serialVersionUID = 1L;
 @Reference(target = "(&(objectclass=javax.sql.DataSource)(datasource.name=aemformswithjson))")
 private DataSource dataSource;

 protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException {
  JSONObject afSubmittedData;
  try {
   afSubmittedData = new JSONObject(request.getParameter("jcr:data"));
   // we will only store the data bound to schema
   JSONObject dataToStore = afSubmittedData.getJSONObject("afData").getJSONObject("afBoundData")
     .getJSONObject("data");
   String formName = afSubmittedData.getJSONObject("afData").getJSONObject("afSubmissionInfo")
     .getString("afPath");
   log.debug("The form name is " + formName);
   insertData(dataToStore, formName);

  } catch (JSONException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }

 public void insertData(org.json.JSONObject jsonData, String formName) {
  log.debug("The json object I got to insert was " + jsonData.toString());
  String insertTableSQL = "INSERT INTO aemformswithjson.formsubmissions(formdata,formname) VALUES(?,?)";
  log.debug("The query is " + insertTableSQL);
  Connection c = getConnection();
  PreparedStatement pstmt = null;
  try {
   pstmt = null;
   pstmt = c.prepareStatement(insertTableSQL);
   pstmt.setString(1, jsonData.toString());
   pstmt.setString(2, formName);
   log.debug("Executing the insert statment  " + pstmt.executeUpdate());
   c.commit();
  } catch (SQLException e) {

   log.error("Getting errors", e);
  } finally {
   if (pstmt != null) {
    try {
     pstmt.close();
    } catch (SQLException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
   if (c != null) {
    try {
     c.close();
    } catch (SQLException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
  }
 }

 public Connection getConnection() {
  log.debug("Getting Connection ");
  Connection con = null;
  try {

   con = dataSource.getConnection();
   log.debug("got connection");
   return con;
  } catch (Exception e) {
   log.error("not able to get connection ", e);
  }
  return null;
 }

}

connectionpool

시스템에서 이 작업을 수행하려면 다음 단계를 수행하십시오

  • zip 파일을 다운로드하고 압축 해제합니다
  • JSON 스키마로 적응형 양식을 만듭니다. 이 문서 자산의 일부로 제공된 JSON 스키마를 사용할 수 있습니다. 양식의 제출 작업이 적절히 구성되어 있는지 확인하십시오. 제출 작업은 "CustomSubmitHelpx"에 구성해야 합니다.
  • MySQL Workbench 도구를 사용하여 schema.sql 파일을 가져와 MySQL 인스턴스에서 스키마를 만듭니다. 이 자습서 자산의 일부로 schema.sql 파일도 제공됩니다.
  • Felix 웹 콘솔에서 Apache Sling 연결의 풀링된 데이터 소스를 구성합니다
  • 데이터 소스 이름의 이름을 "aemformswithjson"으로 지정합니다. 제공된 샘플 OSGi 번들에서 사용되는 이름입니다
  • 속성에 대해서는 위의 이미지를 참조하십시오. MySQL을 데이터베이스로 사용한다고 가정합니다.
  • 이 문서 자산의 일부로 제공된 OSGi 번들을 배포합니다.
  • 양식을 미리 보고 제출합니다.
  • JSON 데이터는 "schema.sql" 파일을 가져올 때 생성된 데이터베이스에 저장됩니다.

이 페이지에서는