将表单提交到 Servlet AEM

Submit form to Servlet AEM

Servlet 代码如下所示

@SlingServlet(
        methods = {"POST"},
        resourceTypes = {"cq:Page"},
        extensions = {"html"})
public class AssetDownloadServlet extends SlingAllMethodsServlet {

    private static final Logger log = LoggerFactory.getLogger(AssetDownloadServlet.class);


    @Override
    protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException
    {
        log.info("%%%%%%%%%%%%%%$$$$$$$$$$$%%%%%%%**************:   "+ "doPost");
        processRequest(request,response);
    }

    @Override
    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException
    {
        log.info("%%%%%%%%%%%%%%$$$$$$$$$$$%%%%%%%**************:   "+ "doGet");
        processRequest(request,response);
    }

    private void processRequest(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException{
        log.info("%%%%%%%%%%%%%%$$$$$$$$$$$%%%%%%%*******************");
        log.info(request.getParameter("format"));
        log.info("%%%%%%%%%%%%%%$$$$$$$$$$$%%%%%%%*******************");
    }
}

html 页面中的表单如下所示

<form method="POST">
  <fieldset>
    <p>Format needed?</p>
    <ul style="list-style-type:none" data-sly-list.rendition="${renditions}">
      <!--${rendition.path}-->
      <li>
        <label>
          <input type="radio" name="format" value="${rendition.name}" />
          <span>${rendition.displayName}</span>
        </label>
      </li>
    </ul>
  </fieldset>
  <fieldset>
    <button type="submit">Start Download</button>
    <a>Cancel Download</a>
  </fieldset>
</form>

页面上的CQ详情

<!--cq{"decorated":false,"type":"myProject/components/page/generic","path":"/content/myProject/en/assetdetail/jcr:content","selectors":"IRNHUF7D","servlet":"Script /libs/foundation/components/page/page.jsp","totalTime":28,"selfTime":8}-->

总结:

我有一个 cq:page 资源,其中有一个表单和 servlet 链接到它。但是在提交表单时,servlet 并未启动投注。我看到 http://localhost:4502/system/console/ 中的属性设置正确。

请推荐..

谢谢

cq:Page 不是资源类型,它是节点类型。您需要将 servlet 中的 resourceType 修复为页面的 jcr:content 节点中的 sling:resourceType。另一件需要注意的事情是,如果您的路径指向 cq:Page 节点,则不会调用设置了 resourceType 的 servlet,它需要指向 jcr:content 节点才能被 servlet 拾取。

@SlingServlet(
        methods = {"POST"},
        resourceTypes = {"path/to/resource/type"},
        extensions = {"html"})
public class AssetDownloadServlet extends SlingAllMethodsServlet {

你的表单定义应该是 -

<form method="POST" action="${currentPage.path}/_jcr_content.html"> 

注意jcr:content写成_jcr_content