Hello to everyone,

after just reading for some week it's now time for my first own question.

I want to integrate a legacy application in a website based on Sling (in 
Day CQ5).
This legacy application renders itself using Portlets, so it enforces the 
use of POST forms if the user submits any data. The application is 
embedded using RequestDispatcher.include(req,res).

Now we all know about the magic SlingPostServlet, but in this case I 
obviously don't want to use it. In case of a POST, I want just to display 
the page as usual and pass the request to the embedded application.
The page is based on components, which are included using 
RequestDispatcher.include(req,res). The page and all components inherit 
from SlingSafeMethodsServlet. They are not registered using @scr 
annotations, but evaluated directly inside the content tree.

To catch the POST before the SlingPostServlet, I can use a subclass of the 
page, so the structure would look like this:

/apps/all/pages/mypage.java
/apps/all/pages/POST.java

I tried this already and it works.

But:
As I said above, the page includes components using 
RequestDispatcher.include(req,res). These components don't have the 
POST.java. Because the SlingHttpServletRequest is still of method POST, 
the SlingPostServlet catches these includes and none of them actually 
resolve to the component's servlet. 

To differ between wanted SlingPostServlet requests and the legacy-POSTs I 
use a selector in the legacy-POSTs. But the main problem remains: As soon 
as I dispatch the request beyond the page, I will be caught by 
SlingPostServlet. It would be ideally to have something like 
SlingRequestDispatcher.includeIgnoreMethod(req,res) or so ;-)

Some things I quickly tried but didn't lead to solutions were:
- Extending SlingAllMethodsServlet instead of SlingSafeMethodsServlet in 
the page 
- Using SlingHttpServletRequestWrapper with overrided getMethod() to 
return always GET

How can I solve this? Subclassing all of my components with a POST.java 
too is not really an option...


Thanks in advance.

Regards,

Matthias Wermund
Software Engineer
---------------------------------------------------------------------
namics ag - ein Unternehmen der PubliGroupe
Teufenerstrasse 19
CH-9000 St. Gallen
http://www.namics.com
http://blog.namics.com
mailto: matthias.werm...@namics.com 

Reply via email to