Wednesday, December 17, 2008

Calling a Site Entry from a form

Updates
16th November, 2009: or use action=post.

In Content Server Explorer, you can create a JSP that is addressable through a Site Entry. For example, create a Content Server Element named my/site/FormResponse and a Site Entry whose RootElement is my/site/FormResponse.jsp - and you can reach that element with a URL such as: http://SERVER/servlet/ContentServer?pagename=my/site/FormResponse. Content Server is the controller (/servlet/ContentServer) that invokes other elements based on the GET arguments sent to it :?pagename=my/site/FormResponse for example.

That's good, but you cannot use that URL directly in a form's action attribute, such as below.

<FORM ACTION="http://SERVER/servlet/ContentServer?pagename=my/site/FormResponse">
<INPUT TYPE="Submit" VALUE="Submit"/>
</FORM>

That's because in a form's action attribute, any GET style arguments at the end of the URL are ignored. So the URL invoked from the FORM above would be http://SERVER/servlet/ContentServer. The fix is simple enough. Put the pagename argument in a hidden field, such as below.

<FORM ACTION="http://SERVER/servlet/ContentServer">
<INPUT TYPE="Submit" VALUE="Submit"/>
<INPUT TYPE="Hidden" NAME="pagename" VALUE="my/site/FormResponse"/>
</FORM>

Or (much simpler!) just explicitly specify action as POST.

<FORM ACTION="http://SERVER/servlet/ContentServer?pagename=my/site/FormResponse" action="POST">
<INPUT TYPE="Submit" VALUE="Submit"/>
</FORM>