I assume this is the same as
https://issues.apache.org/struts/browse/WW-2361? I'm not sure what the
original semantics behind the "defaultEncoding" or the
"struts.i18n.encoding" setting is, but I agree that it looks
suspicious...

Could you create a patch and attach it to the issue?

Nils-H

On Wed, Dec 17, 2008 at 12:41 AM, wesley <wes...@263.net> wrote:
> Hi there,
>
> The method prepare() in org.apache.struts2.dispatcher.Dispatcher will
> forcefully set the encoding and locale of a HttpRequest if there were
> defaultEncoding and defaultLocale in global settings, causing the original
> encoding and locale (if there were any) of the Request being unexpected
> overwritten.
>
> Please take just 5 minutes to examine the code:
>
> =======================================
>   /**
>    * Prepare a request, including setting the encoding and locale.
>    *
>    * @param request The request
>    * @param response The response
>    */
>   public void prepare(HttpServletRequest request, HttpServletResponse
> response) {
>       String encoding = null;
>       if (defaultEncoding != null) {
>           encoding = defaultEncoding;
>       }
>
>       Locale locale = null;
>       if (defaultLocale != null) {
>           locale = LocalizedTextUtil.localeFromString(defaultLocale,
> request.getLocale());
>       }
>
>       if (encoding != null) {
>           try {
>               request.setCharacterEncoding(encoding);
>           } catch (Exception e) {
>               LOG.error("Error setting character encoding to '" + encoding +
> "' - ignoring.", e);
>           }
>       }
>
>       if (locale != null) {
>           response.setLocale(locale);
>       }
>
>       if (paramsWorkaroundEnabled) {
>           request.getParameter("foo"); // simply read any parameter
> (existing or not) to "prime" the request
>       }
>   }
> =======================================
>
> Normally I'm put this line in struts.xml to define the default encoding:
> <constant name="struts.i18n.encoding" value="UTF-8"/>
> If I did so, every request will be unconditionally treated as encoded with
> UTF-8, no matter what was set to be encoded with explicitly.
> I supply a patch as follow:
> =======================================
> /**
>  * Prepare a request, including setting the encoding and locale.
>  *
>  * @param request  The request
>  * @param response The response
>  */
> public void prepare(HttpServletRequest request, HttpServletResponse
> response) {
>  String encoding = request.getCharacterEncoding();
>  if (encoding == null && defaultEncoding != null) {
>  try {
>   request.setCharacterEncoding(defaultEncoding);
>  } catch (Exception e) {
>   LOG.error("Error setting character encoding to '" + defaultEncoding + "' -
> ignoring.", e);
>  }
>  }
>
>  Locale locale = request.getLocale();
>  if (locale == null && defaultLocale != null) {
>  locale = LocalizedTextUtil.localeFromString(defaultLocale,
> request.getLocale());
>  if (locale != null) {
>   response.setLocale(locale);
>  }
>  }
>
>  if (paramsWorkaroundEnabled) {
>  request.getParameter("foo"); // simply read any parameter (existing or not)
> to "prime" the request
>  }
> }
> =======================================
>
> You guys may not think this to be a bug, because most of u rarely use
> Chinese/Japanese character
> set or browsers localized in these language . Different client browsers will
> encode the URL with
> different encoding before they send requests to server!!
>
> Would someone take just 5 minutes to see whether the logic in
> Dispatcher::prepare() is correct or not.
>
> BTW, Glad to see the 2.1 will soon go to GA and see some great heros save
> Convention plugin from dustbin.
>
> regards
> -Wesley
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
> For additional commands, e-mail: dev-h...@struts.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
For additional commands, e-mail: dev-h...@struts.apache.org

Reply via email to