3

我是 CQ5 的新手,我需要用我的组件处理 HTTP POST 请求。我有以下目录结构

/apps/TEST_project/components/myComponent/myComponent.jsp
/apps/TEST_project/components/myComponent/myComponent.POST.jsp

和 myComponent.jsp 中的这个表单

<form action="<%resource.getPath();%>myPage.html" method="POST" enctype="multipart/form-data">
Name <input type="text" name="name" /><br />
E-mail <input type="text" name="email" /><br />
File <input type="file" name="file" /><br />
    <input type="submit" id="Upload" value="Upload" title="Upload" />
</form>

但是每当我提交表单时,我都会得到告诉我这一点的页面

Content modified /content/TEST_project/myPage

Status  
200
Message 
OK
Location    /content/TEST_project/myPage
Parent Location /content/TEST_project
Path    
/content/TEST_project/myPage
Referer http://localhost:4502/content/TEST_project/myPage
ChangeLog   
<pre></pre>

而不是 myComponent.POST.jsp 脚本。

昨天我花了几个小时试图完成这项工作,但没有任何结果......感谢您的帮助

4

3 回答 3

4

通过添加myPage.html到动作的末尾,表单的动作变为/content/TEST_project/myPage.html

由于/content/TEST_project/myPage不解析为资源,默认情况下 Sling 将在此位置创建一个(带有201 Created状态)。如果您再次尝试发布,它现在将针对此新节点进行解析,但由于此节点没有资源类型,它现在使用默认 Post servlet 来修改此资源。

正如其他人所说,要让您的 JSP 处理表单提交,您需要表单操作是<%= resource.getPath() %>.htmlor <%= currentNode.getPath() %>.html(“.html”扩展名是可选的,但只需使用上面的语法)。

这意味着表单提交仍将解析为/apps/TEST_project/components/myComponent. 从那里,您的文件名myComponent.POST.jsp应该可以解决 POST 请求并处理表单提交。

于 2013-06-22T20:11:45.003 回答
1

在表单动作中,将动作更改为 action="<%currentNode.getPath();%>"

谢谢,巴拉吉。

于 2013-06-21T11:37:08.223 回答
1

尝试将 myComponent.POST.jsp 重命名为 POST.jsp。我相信按照您现在的方式,您的 myComponent.POST.jsp 脚本将映射到看起来像 ../myPage.POST.html 的请求。

查看 Adob​​e 关于如何将请求映射到组件脚本的备忘单:http: //dev.day.com/content/ddc/blog/2008/07/cheatsheet/_jcr_content/images/cheatsheet/front.png

于 2013-06-21T00:24:50.077 回答