2013-06-20 138 views
3

我是CQ5的新手,需要使用我的組件處理HTTP POST請求。我有以下目錄結構CQ5/Sling - 處理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腳本。

昨天我花了幾個小時試圖讓這項工作,但沒有任何結果......感謝所有幫助

+1

你爲什麼要在表單動作結束時添加mypage.html?行動應該是資源本身。否則你正在修改另一個可能不是我的「myComponent」資源的節點。 – santiagozky

回答

1

在形式動作,= 「<%currentNode.getPath();%>」 改變行動 動作

謝謝, Balaji。

4

通過添加myPage.html到你的動作結束後,表單的動作變得/content/TEST_project/myPage.html

由於/content/TEST_project/myPage不能解決的資源,吊帶默認情況下將在此位置(用201 Created狀態)創建一個。如果您再次嘗試發佈,它現在將針對此新節點進行解析,但由於此節點沒有資源類型,因此它現在使用默認的Post servlet來修改此資源。

正如其他人所說,讓你的JSP處理表單提交,你需要的形式,動作要<%= resource.getPath() %>.html<%= currentNode.getPath() %>.html(該名「.html」擴展名是可選的,但只是與你有以上的語法去)。

這將意味着表單提交仍然會解析爲資源類型/apps/TEST_project/components/myComponent。從那裏,您的文件名myComponent.POST.jsp應該可以解決POST請求並處理表單提交。