>From: Tomasz Pasierb <[EMAIL PROTECTED]> > > > > Gary VanMatre wrote: > >> From: Tomasz Pasierb > >> > >> Hello, > >> > >> Could any of you guys explain how I can use the shale-clay composition > >> features with html tiles that are encoded in utf-8 or any other encoding > >> than iso-8859-1? > >> > >> From what I have found so far it seems that it's actually a problem of > >> jsp spec and tomcat implementation (or the fact that it strictly > >> implements the spec). With html templates I have no option of setting > >> the pageEncoding or contentType page directives (those apply to jsps). > >> I've got shale configured to proccess *.html and *.faces requests. > >> Underneath all those requests go through jasper (when deployed on > >> tomcat). Jasper reads the tile (html), and as it cannot find the page > >> directives that would make it set encoding to utf-8 it defaults to > >> iso-8859-1 (jsp spec) which as I've found I cannot change. As a result > >> the utf-8 encoded file is read as iso-8859-1 and garbage is displayed on > >> screen. The solution would probably be to set uft-8 as the default > >> encoding for jasper but that's not JSP specification compliant as Craig > >> McClanahan stated here: > >> > http://mail-archives.apache.org/mod_mbox/tomcat-dev/200105.mbox/%3cPine.BSF.4.21 > > >> [EMAIL PROTECTED] > >> > >> > >> During my "investigation" I found that I could use the switch > >> -Dfile.encoding=utf-8 which actually makes tomcat use utf-8 encoding > >> internally and myfaces doesn't convert non-ascii characters to html > >> entities any longer but those characters are still not converted > >> correctly when they are read from hdd. > >> > >> I've tried filtering all requests and in my desparation ;-) I've set > >> both request's and response's characterEncoding to utf-8 and response's > >> contentType to "text/html;charset=utf-8" but it doesn't seem to work. > >> > >> I've tried the following thing on tomcat to actually check this: > >> I prepared a utf-8 encoded html file with non-ascii characters. I viewed > >> this page with standard tomcat web.xml and server.xml settings plus the > >> -Dfile.encoding=utf-8 option. The page was read by tomcat correctly from > >> disk and displayed correctly in the browser. Then I mapped the *.html > >> extension to jsp servlet. When I requested the page, the response had > >> the wrong characters in it and was not displayed correctly in the browser. > >> > >> Is there any solution to this problem? Please tell me those composition > >> features of shale-clay can actually be used with something else than > >> iso-8859-1. > >> > >> Maybe an configuration option could be introduced in shale for encoding > >> that would be used when shale generates jsps dynamically (the page > >> directive). I guess this would make the problem go away. > >> > >> > > > > The Clay full html views don't generate JSP's. They build the JSF component > > tree and the components invoke rendering. > > > > However, Clay is a JSF component and can be used within a JSP page. I > > think that would be a good test for us to help narrow down where the > > fault lies. > > > > I'd like you to try using clay within a JSP page. The entire page would > > look like the following: >> <[EMAIL PROTECTED] contentType="text/html;charset=UTF-8"%> >> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%> >> <%@ taglib prefix="clay" uri="http://shale.apache.org/clay"%> >> <f:view> >> <clay:clay id="page1" jsfid="/pages/page1.html"/> >> </f:view> >> >I've tried what you suggested above. >I have prepared a page with the following content: > <[EMAIL PROTECTED] pageEncoding="utf-8" > contentType="text/html;charset=UTF-8"%> > <%@ taglib uri="http://shale.apache.org/clay" prefix="clay" %> > <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> > <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> > > <f:view> > <clay:clay id="page1" jsfid="/some.html"/> > <f:verbatim><br /></f:verbatim> > <h:outputText value="ÅÅóÄżźÄÅ" /> > <f:verbatim><br />ÅÅóÄżźÄÅ</f:verbatim> > </f:view> > and saved it as whatever.jsp > The file some.html contained the same set of characters as h:outputText > element's value attribute in the above jsp (one line of text). I don't > know if you will see those characters correctly here in this email but > those are a few of the Polish language specific characters that are > non-ascii and as such are encoded as two-byte utf-8 characters. Both > whatever.jsp and some.html were saved with utf-8 encoding. > > When I requested this page (/whatever.faces) I got the response with: > - first line of bad characters (the line from some.html) > - second and third line with good characters. > > Clay loads those components from hdd at some point and that's probably > the moment where the characters are read wrongly. I guess it reads those > files assuming they are iso-8859-1 or something and that's why they look > bad in the generated response. The characters that are in the jsp > directly are read correctly (as utf-8) thanks to the @page directive at > the top of the file. If I omit the whole first line all of the > characters do not display correctly. > > If that's the case, then as I wrote in my previous email maybe there > should be an element one could include in html file that would tell clay > what encoding to use for reading the file (something like the page > directive for jsps) or an application wide config option informing clay > what encoding it should use for reading html templates (that might be > easier for html developers).
Sounds like a good idea. > Does clay use request's characterEncoding when loading those files? This > way one could set the request's characterEncoding in a filter and then > clay would use this when loading those files. As for now setting utf-8 > encoding for the request object in a filter doesn't work (the characters > do not display correct). No, it loads the file as an InputStream and then writes it to a StringBuffer. This might be the problem area. You can find the code in the loadTemplate method here: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/config/ClayTemplateParser.java?view=markup > I'm not sure what would be the best solution if any of those are any > good (I'm not an expert :-)) but I do hope for some change that would > correct this. I'm not one of those either but I bet we can figure this one out working together. I appreciate the help. > > Another task would be to create a JIRA Shale issue > > (https://issues.apache.org/struts/secure/Dashboard.jspa) > > and attach the utf encoded template examples. > > > > > > > I'd be grateful if you told me briefly what else apart from the utf > encoded templates I should include in this issue on JIRA as I have never > filed an issue in any JIRA system before (that's going to be my first > time ;-)) > The templates will be a good start. You can always add more to the ticket later. I'll probabaly drop this into a couple different test cases to see if I can find what's going wrong. Just in case you are interested, there is one TestCase that just looks at markup parsing: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/test/java/org/apache/shale/clay/parser/ParserTestCase.java?view=log There's another that loads the template and builds the components: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/test/java/org/apache/shale/clay/config/CommentTestCase.java?view=markup > Regards, > Tom Pasierb Gary > > ---------------------------------------------------------------------- > Jestes kierowca? To poczytaj! >>> http://link.interia.pl/f199e >
