CQ5 / Sling - 处理POST请求

时间:2013-06-20 06:41:11

标签: jsp post cq5 sling

我是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脚本。

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

3 个答案:

答案 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;” 中

谢谢, 巴拉吉。