I was thinking about it one more time before checking it in. I'll honor
page level encoding first then look for app level, and then fall back to
client. I'll change the logic this way, and check it in.
If page level encoding is set, I think we've to honor it first.
thx
Senthil
Senthil Chidambaram wrote:
> I'm attaching the diffs for three files LayoutViewHandler.java,
> Util.java, and UtilHanlders.java which takes care of setting encoding
> type, and client locale.
>
> This is the logic I'm using if an app level encoding type is set use
> it, if not look for page level encoding type, then try client encoding
> type, and finally hard coding it to UTF-8.
>
> You can see the above logic in utildiff file, and the handler method
> I've added to set page level encoding type is in handlersdiff.
> LayoutViewHandlerdiff is where the page is being served to the client.
>
> P.S: I know Ken is off, but I would appreciate if you any one of you
> could review it, and let me know. I can checkin the changes.
>
>------------------------------------------------------------------------
>
>Index: LayoutViewHandler.java
>===================================================================
>RCS file: /cvs/jsftemplating/src/java/com/sun/jsftemplating/layout/LayoutViewHandler.java,v
>retrieving revision 1.19
>diff -c -r1.19 LayoutViewHandler.java
>*** LayoutViewHandler.java 1 Mar 2007 04:41:50 -0000 1.19
>--- LayoutViewHandler.java 7 Mar 2007 22:01:30 -0000
>***************
>*** 514,526 ****
> contentTypeList = "text/html;q=1.0";
> }
> }
>! String encType = request.getCharacterEncoding();
>! if(encType != null && encType.length() > 0) {
>! response.setCharacterEncoding(encType);
>! }
>! else {
>! response.setCharacterEncoding("UTF-8");
> }
>
> // FIXME: Portlet?
> writer =
>--- 514,527 ----
> contentTypeList = "text/html;q=1.0";
> }
> }
>! String encType = Util.getEncoding(context);
>! if(encType == null) {
>! encType = request.getCharacterEncoding();
>! if(encType == null) {
>! encType="UTF-8";
>! }
> }
>+ response.setCharacterEncoding(encType);
>
> // FIXME: Portlet?
> writer =
>
>
>------------------------------------------------------------------------
>
>Index: Util.java
>===================================================================
>RCS file: /cvs/jsftemplating/src/java/com/sun/jsftemplating/util/Util.java,v
>retrieving revision 1.6
>diff -c -r1.6 Util.java
>*** Util.java 16 Nov 2006 19:22:33 -0000 1.6
>--- Util.java 7 Mar 2007 22:02:45 -0000
>***************
>*** 29,34 ****
>--- 29,36 ----
> import javax.faces.component.UIViewRoot;
> import javax.faces.context.FacesContext;
>
>+ import com.sun.jsftemplating.el.PageSessionResolver;
>+
>
> /**
> * <p> This class is for general purpose utility methods.</p>
>***************
>*** 97,102 ****
>--- 99,122 ----
> // Return the result
> return props;
> }
>+ /**
>+ * <p> Help obtain the current encoding type.</p>
>+ */
>+
>+ public static String getEncoding(FacesContext ctx) {
>+ String encType = null;
>+ if (ctx != null) {
>+ encType = ctx.getExternalContext().getInitParameter("ENCODING_TYPE");
>+ if(encType == null) {
>+ UIViewRoot root = ctx.getViewRoot();
>+ Map map = PageSessionResolver.getPageSession(ctx, root);
>+ if(map != null) {
>+ encType = (String)map.get("encoding");
>+ }
>+ }
>+ }
>+ return encType;
>+ }
>
> /**
> * <p> Help obtain the current <code>Locale</code>.</p>
>
>
>------------------------------------------------------------------------
>
>Index: UtilHandlers.java
>===================================================================
>RCS file: /cvs/jsftemplating/src/java/com/sun/jsftemplating/handlers/UtilHandlers.java,v
>retrieving revision 1.14
>diff -c -r1.14 UtilHandlers.java
>*** UtilHandlers.java 6 Nov 2006 08:53:50 -0000 1.14
>--- UtilHandlers.java 7 Mar 2007 22:03:01 -0000
>***************
>*** 374,379 ****
>--- 374,396 ----
> }
>
> /**
>+ * <p> This handler sets the encoding type of the given UIComponent's
>+ * attribute map.</p>
>+ *
>+ * @param context The HandlerContext.
>+ */
>+ @Handler(id="setEncoding",
>+ input={
>+ @HandlerInput(name="value", type=String.class)
>+ },
>+ output={
>+ @HandlerOutput(name="value", type=String.class)})
>+ public static void setEncoding(HandlerContext context) {
>+ String value = (String) context.getInputValue("value");
>+ context.setOutputValue("value", value);
>+ }
>+
>+ /**
> * <p> This handler prints out the contents of the given UIComponent's
> * attribute map.</p>
> *
>
>