我是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脚本。
昨天我花了几个小时试图完成这项工作,但没有任何结果......感谢任何帮助
答案 0 :(得分:4)
通过在您的操作结束时添加myPage.html
,您的表单操作将变为/content/TEST_project/myPage.html
由于/content/TEST_project/myPage
无法解析为资源,因此默认情况下,Sling会在此位置创建一个(状态为201 Created
)。如果您再次尝试发布,它现在将针对此新节点进行解析,但由于此节点没有资源类型,因此它现在使用默认的Post servlet来修改此资源。
正如其他人所说,为了让你的JSP处理表单提交,你需要表单操作为<%= resource.getPath() %>.html
或<%= currentNode.getPath() %>.html
(“.html”扩展名是可选的,但只是使用上面的语法。
这意味着表单提交仍将解析为/apps/TEST_project/components/myComponent
的资源类型。从那里,您的文件名myComponent.POST.jsp
应该可以解决POST请求并处理表单提交。
答案 1 :(得分:1)
尝试将myComponent.POST.jsp重命名为POST.jsp。我相信你的方式现在你的myComponent.POST.jsp脚本将被映射到看起来像../ myPage.POST.html的请求。
查看Adobe关于请求如何映射到组件脚本的备忘单: http://dev.day.com/content/ddc/blog/2008/07/cheatsheet/_jcr_content/images/cheatsheet/front.png
答案 2 :(得分:1)
在表单操作中,将操作更改为 的行动= “LT;%currentNode.getPath();%&gt;” 中强>
谢谢, 巴拉吉。