With the 2.3 servet API, there is a new method:

        request.setCharacterEncoding(String encoding)

This lets you tell the server a request's character encoding. It is
critical that setCharacterEncoding is called BEFORE any
request.getParameter is called (or getReader). Otherwise, you are at the
mercy of the appserver for what you get back on the getParameter call.
For example, if setCharacterEncoding is not called, you could get a null
value back on getParameter("foo"). 

When you post directly to a jsp (MVC 1), the "entry point" for servicing
the page is ultimately the page itself. So JspCompilers have
request.setCharacterEncoding("whatever"); in the generated java code as
one of the first things that get done.

But with Struts, the entry point is not the JSP but rather the action.
You eventually forward to the view but by that point, you've already
processed the request.

So my question is this: For struts actions and forms and anything else
struts, is there 1 common place where we can override something to call
request.setCharacterEncoding(). Is RequestProcessor.processPreprocess
the place to do it? I grepped the struts 1.2.4 source code and only
found a setCharacterEncoding on upload\MultipartRequestWrapper.java.
That method is a no-op. Ideally, we only want to override 1 method that
will handle the request's encoding for form validation and the action
handlers, etc. If processPreprocess is NOT the place to do this,
where/how should we do this? The ActionServlet instance perhaps that
calls RequestProcessor.process()? The action handler knows what encoding
to use so somehow, I would have to tell the request processor the
"encoding" unless I can override something in the ActionServlet before
process() gets called.

I did *some* searching through the struts source code and in
RequestProcessor, the call to processPopulate does a getParameter:
        if ((request.getParameter(Constants.CANCEL_PROPERTY) != null) ||
            (request.getParameter(Constants.CANCEL_PROPERTY_X) != null))
{

So calling setCharacterEncoding has to be done before processPopulate().

Thanks!

Randy

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to