Re: Kodovani a JSF?
Len na okraj. Sice MS SQL som nepouzival uz roky ale vsade kde som nahodou k tejto skratke prisiel ci uz na konfere, alebo inom clanku tak original dodavany MS SQL driver je jednak stary (asi aj nie je supportovany) a jednak ma problemy s datumami. Odporucil by som ti radsej pouzit http://jtds.sourceforge.net/ Roman Pavel Rezny said: jj, to bude asi ten problem, ze se v connct stringu nic nespecifikovalo a tudis nevim, jake kodovani driver predpokladal a jestli byl schopen od serveru zjistit, v jakem kodovani je DB. Jednalo se o MS SQL server s kodovanim win-1250 a JDBC driver od Microsoftu. Takze jeste pohledam timto smerem a ted uz by se melo podarit premluvit ho na UTF-8 ;-) Jeste jednou dekuji za uzitecne rady. PavelR Martin Kuba wrote: Pavel Rezny wrote: Pro pristup do DB pouzivame Hibernate a pokud byla DB win-1250 a stranka byla win-1250 bylo vse spravne, ale pokud byla stranka v html-head-meta oznacena jako UTF-8 nebylo kodovani spravne, i kdyz v Tapestry 3 (http://jakarta.apache.org/tapestry/) bylo vse nastaveno na UTF-8 (jeste nebylo pouzivano JSF). To vypada, ze data z databaze byla nactena sice jako windows-1250 bajty, ale s deklaraci iso-8859-1, takze ve vnitrnim ulozeni javy to byl nejaky nesmysl. Nicmene kdyz se na vystup daly jako iso-8859-1 (default kodovani ze servletu) a v HTML META tagu se to oznacilo jako windows-1250, provedl browser druhy spatny preklad, ktery ale vyrusil tu prvni chybu, takze se to zobrazilo dobre. Naopak spravne nastaveni kodovani na utf-8 situaci opticky zhorsilo. Takze problem bude v nastaveni databaze. Co pouzivate ? Vidim to tak, ze JDBC driver je natolik hloupy, ze se nezepta serveru na spravne kodovani, a zaroven mu nebylo spravne kodovani rucne nastaveno. To dela treba MySQL, ale nejspis i jine databaze. Takze jeste proverim, jak jsou opravdu predavana data z Hibernate a jestli by tedy bylo mozne nastavit kodovou stranku vzdy na UTF-8 bez ohledu na to, jak jsou ulozena data v DB. Ano vnitrni reprezentaci Stringu v Jave chapu presne tak, jak jste popsal vyse, a samozrejme pokud se pouziji nastroje javy pro nacitani z DB/souboru, tak se vzdy uvadi v jakem kodovani je zdroj. Ale protoze jsem si nebyl vubec jisty, jak data dostavam z DB a mel jsem predchozi spatnou zkusenost, tak jsem nechtel omezit stranky pouze na UTF-8. Ale pokud to nebude pusobit zadny problem, budu jedine rad, kdyz budou stranky vzdy v UTF-8. Spravne nacteni dat z databaze je odpovednosti JDBC driveru, musite se podivat do jeho dokumentace. Kdyz bude nejhur, muzete spatne nacteny String opravit takhle: String dobre = new String(spatne.getBytes(spatne kodovani),spravne kodovani); ale treba u MySQL staci do JDBC URL dat ?useUnicode=truecharacterEncoding=windows-1250 samozrejme za predpokladu, ze server pouziva windows-1250, a pak vsechno funguje jako po masle. Makub
RE: Kodovani a JSF?
Rozhodne souhlasím. Taky je jtds rychlejí a mení ;-)) Petr -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Behalf Of Roman Hrivik Sent: Wednesday, January 04, 2006 11:03 AM To: Java Subject: Re: Kodovani a JSF? Len na okraj. Sice MS SQL som nepouzival uz roky ale vsade kde som nahodou k tejto skratke prisiel ci uz na konfere, alebo inom clanku tak original dodavany MS SQL driver je jednak stary (asi aj nie je supportovany) a jednak ma problemy s datumami. Odporucil by som ti radsej pouzit http://jtds.sourceforge.net/ Roman Pavel Rezny said: jj, to bude asi ten problem, ze se v connct stringu nic nespecifikovalo a tudis nevim, jake kodovani driver predpokladal a jestli byl schopen od serveru zjistit, v jakem kodovani je DB. Jednalo se o MS SQL server s kodovanim win-1250 a JDBC driver od Microsoftu. Takze jeste pohledam timto smerem a ted uz by se melo podarit premluvit ho na UTF-8 ;-) Jeste jednou dekuji za uzitecne rady. PavelR Martin Kuba wrote: Pavel Rezny wrote: Pro pristup do DB pouzivame Hibernate a pokud byla DB win-1250 a stranka byla win-1250 bylo vse spravne, ale pokud byla stranka v html-head-meta oznacena jako UTF-8 nebylo kodovani spravne, i kdyz v Tapestry 3 (http://jakarta.apache.org/tapestry/) bylo vse nastaveno na UTF-8 (jeste nebylo pouzivano JSF). To vypada, ze data z databaze byla nactena sice jako windows-1250 bajty, ale s deklaraci iso-8859-1, takze ve vnitrnim ulozeni javy to byl nejaky nesmysl. Nicmene kdyz se na vystup daly jako iso-8859-1 (default kodovani ze servletu) a v HTML META tagu se to oznacilo jako windows-1250, provedl browser druhy spatny preklad, ktery ale vyrusil tu prvni chybu, takze se to zobrazilo dobre. Naopak spravne nastaveni kodovani na utf-8 situaci opticky zhorsilo. Takze problem bude v nastaveni databaze. Co pouzivate ? Vidim to tak, ze JDBC driver je natolik hloupy, ze se nezepta serveru na spravne kodovani, a zaroven mu nebylo spravne kodovani rucne nastaveno. To dela treba MySQL, ale nejspis i jine databaze. Takze jeste proverim, jak jsou opravdu predavana data z Hibernate a jestli by tedy bylo mozne nastavit kodovou stranku vzdy na UTF-8 bez ohledu na to, jak jsou ulozena data v DB. Ano vnitrni reprezentaci Stringu v Jave chapu presne tak, jak jste popsal vyse, a samozrejme pokud se pouziji nastroje javy pro nacitani z DB/souboru, tak se vzdy uvadi v jakem kodovani je zdroj. Ale protoze jsem si nebyl vubec jisty, jak data dostavam z DB a mel jsem predchozi spatnou zkusenost, tak jsem nechtel omezit stranky pouze na UTF-8. Ale pokud to nebude pusobit zadny problem, budu jedine rad, kdyz budou stranky vzdy v UTF-8. Spravne nacteni dat z databaze je odpovednosti JDBC driveru, musite se podivat do jeho dokumentace. Kdyz bude nejhur, muzete spatne nacteny String opravit takhle: String dobre = new String(spatne.getBytes(spatne kodovani),spravne kodovani); ale treba u MySQL staci do JDBC URL dat ?useUnicode=truecharacterEncoding=windows-1250 samozrejme za predpokladu, ze server pouziva windows-1250, a pak vsechno funguje jako po masle. Makub Information from NOD32 This message was checked by NOD32 Antivirus System for Linux Mail Server. http://www.nod32.com
Re: Kodovani a JSF?
Diky Romanovi a Petrovi za doporuceni. Zatim jsme na zadny podobny problem nenarazili, ale asi drive nebo pozdeji by se to stalo. Takze rozhodne jTDS zkusim. (Take me potesilo: passes both the J2EE 1.3 certification http://java.sun.com/products/jdbc/download.html#testsuite131 and Hibernate http://www.hibernate.org test suites ;-) Hezky den PavelR Roman Hrivik wrote: Len na okraj. Sice MS SQL som nepouzival uz roky ale vsade kde som nahodou k tejto skratke prisiel ci uz na konfere, alebo inom clanku tak original dodavany MS SQL driver je jednak stary (asi aj nie je supportovany) a jednak ma problemy s datumami. Odporucil by som ti radsej pouzit http://jtds.sourceforge.net/ Roman
RE: Kodovani a JSF?
MS SQL driver od MS navic neumi CLOBy a Quantum DB eclipse plugin s nim ma taky problemy. Cili s MS SQL uz jen jedine JTDS :-) petr __ Od: [EMAIL PROTECTED] Komu: Java konference@java.cz CC: Datum: 04.01.2006 11:12 Předmět: RE: Kodovani a JSF? Rozhodne souhlasím. Taky je jtds rychlejí a mení ;-)) Petr -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Behalf Of Roman Hrivik Sent: Wednesday, January 04, 2006 11:03 AM To: Java Subject: Re: Kodovani a JSF? Len na okraj. Sice MS SQL som nepouzival uz roky ale vsade kde som nahodou k tejto skratke prisiel ci uz na konfere, alebo inom clanku tak original dodavany MS SQL driver je jednak stary (asi aj nie je supportovany) a jednak ma problemy s datumami. Odporucil by som ti radsej pouzit http://jtds.sourceforge.net/ Roman Pavel Rezny said: jj, to bude asi ten problem, ze se v connct stringu nic nespecifikovalo a tudis nevim, jake kodovani driver predpokladal a jestli byl schopen od serveru zjistit, v jakem kodovani je DB. Jednalo se o MS SQL server s kodovanim win-1250 a JDBC driver od Microsoftu. Takze jeste pohledam timto smerem a ted uz by se melo podarit premluvit ho na UTF-8 ;-) Jeste jednou dekuji za uzitecne rady. PavelR Martin Kuba wrote: Pavel Rezny wrote: Pro pristup do DB pouzivame Hibernate a pokud byla DB win-1250 a stranka byla win-1250 bylo vse spravne, ale pokud byla stranka v html-head-meta oznacena jako UTF-8 nebylo kodovani spravne, i kdyz v Tapestry 3 (http://jakarta.apache.org/tapestry/) bylo vse nastaveno na UTF-8 (jeste nebylo pouzivano JSF). To vypada, ze data z databaze byla nactena sice jako windows-1250 bajty, ale s deklaraci iso-8859-1, takze ve vnitrnim ulozeni javy to byl nejaky nesmysl. Nicmene kdyz se na vystup daly jako iso-8859-1 (default kodovani ze servletu) a v HTML META tagu se to oznacilo jako windows-1250, provedl browser druhy spatny preklad, ktery ale vyrusil tu prvni chybu, takze se to zobrazilo dobre. Naopak spravne nastaveni kodovani na utf-8 situaci opticky zhorsilo. Takze problem bude v nastaveni databaze. Co pouzivate ? Vidim to tak, ze JDBC driver je natolik hloupy, ze se nezepta serveru na spravne kodovani, a zaroven mu nebylo spravne kodovani rucne nastaveno. To dela treba MySQL, ale nejspis i jine databaze. Takze jeste proverim, jak jsou opravdu predavana data z Hibernate a jestli by tedy bylo mozne nastavit kodovou stranku vzdy na UTF-8 bez ohledu na to, jak jsou ulozena data v DB. Ano vnitrni reprezentaci Stringu v Jave chapu presne tak, jak jste popsal vyse, a samozrejme pokud se pouziji nastroje javy pro nacitani z DB/souboru, tak se vzdy uvadi v jakem kodovani je zdroj. Ale protoze jsem si nebyl vubec jisty, jak data dostavam z DB a mel jsem predchozi spatnou zkusenost, tak jsem nechtel omezit stranky pouze na UTF-8. Ale pokud to nebude pusobit zadny problem, budu jedine rad, kdyz budou stranky vzdy v UTF-8. Spravne nacteni dat z databaze je odpovednosti JDBC driveru, musite se podivat do jeho dokumentace. Kdyz bude nejhur, muzete spatne nacteny String opravit takhle: String dobre = new String(spatne.getBytes(spatne kodovani),spravne kodovani); ale treba u MySQL staci do JDBC URL dat ?useUnicode=truecharacterEncoding=windows-1250 samozrejme za predpokladu, ze server pouziva windows-1250, a pak vsechno funguje jako po masle. Makub Information from NOD32 This message was checked by NOD32 Antivirus System for Linux Mail Server. http://www.nod32.com
Re: Kodovani a JSF?
Pavel Rezny wrote: Dobry den, mam problem, ze server posila http header, ktery obsahuje definici kodovani 8859-1. Ovsem ja mam stranky v ruznem kodovani (v soucasnosti UTF-8, ale chtel bych zachovat moznost mit jednu stranku s tim, ze kodovani se do ni doplni az do html-head-meta). Ovsem prohlizec nehledi na obsah HTML a orientuje se podle HTTP hlavicky. Nenasel jsem, jak nastavit kodovani stranek pro jednu aplikaci. Nasel jsem pouze, ze by to melo jit pro cely server a nebo pro jednu stranku pomoci %@ page contentType=text/html;charset=UTF-8 %. Problem se projevuje na Tomcat 5.5 (jsf 1.1.01) a Glassfish b32. Je nejaka moznost, jak nastavit bud, ze se kodovani vubec v http hlavicce nebude posilat a nebo, ze pro jednu aplikaci (deployovany WAR) je platne jedno urcite kodovani? Nevim jak to delaja konkretne JSF, ale obecne je to tak, ze kodovani se nastavuje volanim response.setContentType(text/html;charset=utf-8); nebo response.setContentType(text/html); response.setCharacterEncoding(utf-8); podrobnosti viz http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/ServletResponse.html#setCharacterEncoding(java.lang.String) Tohle volani muzete delat bud rucne ze servletu ci filtru, v pripade JSP stranek ho muzete specifikovat pro kazdou stranku pomoci %@ page contentType=text/html;charset=UTF-8 % nebo podle specifikace JSP2.0 pro skupinu stranek ve web.xml pomoci jsp-property-group url-pattern*.jsp/url-pattern page-encodingutf-8/page-encoding /jsp-property-group viz specifikace JSP 2.0, cast 3.3.4 na strane 1-90. Tuhle posledni moznost jsem nezkousel, tak nevim jestli v tomcatu 5.5 funguje, ale mela by. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: [EMAIL PROTECTED] Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Kodovani a JSF?
Dekuji za rychlou a vycerpavajici odpoved. response.setContentType/CharacterEncoding zkusim nastavit v jednom z PhaseListeneru, jestli splni zamysleny ucel. V kazde JSP strance se mi to nechce delat, protoze jsem chtel mit tu samou stranku pouzitelnou pro ruzna kodovani. jsp-property-group nevim jestli je možné/správné pouzit v JSF aplikaci, kde na definici zpracovatele konkretni pripony je pouzito nastaveni ve web.xml aplikace: web-app ... servlet servlet-namepokus/servlet-name servlet-classjavax.faces.webapp.FacesServlet/servlet-class load-on-startup1/load-on-startup /servlet servlet-mapping servlet-namepokus/servlet-name url-pattern*.jsf/url-pattern /servlet-mapping ... /web-app (Ovsem tady neni dovolen tag page-encoding :-( Reseni, ze se pri kazdem requestu nastavuje kodovani znovu at jiz response.setContentType/CharacterEncoding nebo v kazde strance jsp se mi zda neohrabane. Cekal jsem, ze by melo jit na serveru bud vypnout zasilani kodovani v http hlavicce uplne (a posilat jen html-head-meta doplnovane skriptem - coz je stejne neohrabane, ale dostatecne univerzalni ;-) a nebo na jednom miste nakonfigurovat nastaveni platne pro celou aplikaci (.war). PavelR Martin Kuba wrote: Pavel Rezny wrote: Dobry den, mam problem, ze server posila http header, ktery obsahuje definici kodovani 8859-1. Ovsem ja mam stranky v ruznem kodovani (v soucasnosti UTF-8, ale chtel bych zachovat moznost mit jednu stranku s tim, ze kodovani se do ni doplni az do html-head-meta). Ovsem prohlizec nehledi na obsah HTML a orientuje se podle HTTP hlavicky. Nenasel jsem, jak nastavit kodovani stranek pro jednu aplikaci. Nasel jsem pouze, ze by to melo jit pro cely server a nebo pro jednu stranku pomoci %@ page contentType=text/html;charset=UTF-8 %. Problem se projevuje na Tomcat 5.5 (jsf 1.1.01) a Glassfish b32. Je nejaka moznost, jak nastavit bud, ze se kodovani vubec v http hlavicce nebude posilat a nebo, ze pro jednu aplikaci (deployovany WAR) je platne jedno urcite kodovani? Nevim jak to delaja konkretne JSF, ale obecne je to tak, ze kodovani se nastavuje volanim response.setContentType(text/html;charset=utf-8); nebo response.setContentType(text/html); response.setCharacterEncoding(utf-8); podrobnosti viz http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/ServletResponse.html#setCharacterEncoding(java.lang.String) Tohle volani muzete delat bud rucne ze servletu ci filtru, v pripade JSP stranek ho muzete specifikovat pro kazdou stranku pomoci %@ page contentType=text/html;charset=UTF-8 % nebo podle specifikace JSP2.0 pro skupinu stranek ve web.xml pomoci jsp-property-group url-pattern*.jsp/url-pattern page-encodingutf-8/page-encoding /jsp-property-group viz specifikace JSP 2.0, cast 3.3.4 na strane 1-90. Tuhle posledni moznost jsem nezkousel, tak nevim jestli v tomcatu 5.5 funguje, ale mela by. Makub
Re: Kodovani a JSF?
Martin Kuba wrote: Pavel Rezny wrote: Dekuji za rychlou a vycerpavajici odpoved. response.setContentType/CharacterEncoding zkusim nastavit v jednom z PhaseListeneru, jestli splni zamysleny ucel. V kazde JSP strance se mi to nechce delat, protoze jsem chtel mit tu samou stranku pouzitelnou pro ruzna kodovani. Moc nechapu, proc chcete mit jednu stranku s ruznym kodovanim. Bud pouzijte pro vsechno utf-8, to je nejlepsi, nebo pokud potrebujete podporovat nejake strare prohlizece, kter utf-8 neumi (jsou jeste takove?), tak v JSP strankach nespecifikujte kodovani vubec a rozhodujte ho v nejakem filtru. Napriklad proto, ze data v jiz existujici DB jsou kodovana nejak jinak nez UTF-8 a vyuzivana jeste nejakou jinou aplikaci, tak je zbytecne provadet za behu dalsi prekodovani. A pokud chci pouzit stejne stranky v jine aplikaci s jinym kodovanim, tak to nechci v kazde strance nahrazovat. Ano specifikovat ho v nejakem filtru je idealni, jen nevim, jestli to v JSF jde a kde ;-) jsp-property-group nevim jestli je možné/správné pouzit v JSF aplikaci, kde na definici zpracovatele konkretni pripony je pouzito nastaveni ve web.xml aplikace: web-app ... servlet servlet-namepokus/servlet-name servlet-classjavax.faces.webapp.FacesServlet/servlet-class load-on-startup1/load-on-startup /servlet servlet-mapping servlet-namepokus/servlet-name url-pattern*.jsf/url-pattern /servlet-mapping ... /web-app (Ovsem tady neni dovolen tag page-encoding :-( V tomto pripade to nejde, pokud se tlucou mapovani pro servlety a jsp-group, vyhrava to specifictejsi, aspon podle specifikace JSP. Reseni, ze se pri kazdem requestu nastavuje kodovani znovu at jiz response.setContentType/CharacterEncoding nebo v kazde strance jsp se mi zda neohrabane. Pri kazdem requestu *musite* znovu nastavit kodovani, protoze requesty jsou na sobe nezavisle. To je mi jasne, jen jsem hledal nejake jedno misto, kde to bude pro aplikaci nastaveno, pokud takove misto neni, tak druhe nejlepsi misto je response.set delane rucne (v kodu PhaseListeneru) v kazdem requestu. Cekal jsem, ze by melo jit na serveru bud vypnout zasilani kodovani v http hlavicce uplne (a posilat jen html-head-meta doplnovane skriptem - coz je stejne neohrabane, ale dostatecne univerzalni ;-) a nebo na jednom miste nakonfigurovat nastaveni platne pro celou aplikaci (.war). To ma nejspis na svedomi ten FacesServlet, normalne servlety a JSP nastavuji jenom text/html a iso-8859-1 predpoklada jenom specifikace HTML. Takze nekde v FacesServlet bude radek response.setContentType(text/html;charset=iso-8859-1); a ten to zpusobuje. Pravdepodobne ten servlet bude mit nejaky inicializacni parametr nebo tak neco, cim by se to dalo zmenit. OK, vydam se hledat timto smerem. Moc diky za nakopnuti. PavelR
Re: Kodovani a JSF?
Martin Kuba wrote: Pavel Rezny wrote: Moc nechapu, proc chcete mit jednu stranku s ruznym kodovanim. Bud pouzijte pro vsechno utf-8, to je nejlepsi, nebo pokud potrebujete podporovat nejake strare prohlizece, kter utf-8 neumi (jsou jeste takove?), tak v JSP strankach nespecifikujte kodovani vubec a rozhodujte ho v nejakem filtru. Napriklad proto, ze data v jiz existujici DB jsou kodovana nejak jinak nez UTF-8 a vyuzivana jeste nejakou jinou aplikaci, tak je zbytecne provadet za behu dalsi prekodovani. To je naproste nepochopeni toho, jak prace se znaky v Jave funguje. Vsechny znaky jsou v Jave vnitrne kodovany jako UTF-16, takze pri nacteni dat z databaze k tomu prekodovani stejne dojde, at chcete nebo nechcete. A pri generovani webove stranky (respektive response od servletu) zase musi dojit k prekodovani z vnitrni reprezentace na vystupni kodovani, ktere nema s kodovanim v nejake databazi zhola nic spolecneho. Cili to jak jsou data kodovana v nejake databazi nema zadny vliv na to, v jakem kodovani budete produkovat webove stranky. Stejne jako to nijak nesouvisi s kodovanim nejakeho textoveho souboru, ze ktereho byste znaky pripadne nacital. A to napriklad textoveho souboru se zdrojem JSP stranky. To muze byt prekvapive, ale je to logicke. Pro pristup do DB pouzivame Hibernate a pokud byla DB win-1250 a stranka byla win-1250 bylo vse spravne, ale pokud byla stranka v html-head-meta oznacena jako UTF-8 nebylo kodovani spravne, i kdyz v Tapestry 3 (http://jakarta.apache.org/tapestry/) bylo vse nastaveno na UTF-8 (jeste nebylo pouzivano JSF). Takze jeste proverim, jak jsou opravdu predavana data z Hibernate a jestli by tedy bylo mozne nastavit kodovou stranku vzdy na UTF-8 bez ohledu na to, jak jsou ulozena data v DB. Ano vnitrni reprezentaci Stringu v Jave chapu presne tak, jak jste popsal vyse, a samozrejme pokud se pouziji nastroje javy pro nacitani z DB/souboru, tak se vzdy uvadi v jakem kodovani je zdroj. Ale protoze jsem si nebyl vubec jisty, jak data dostavam z DB a mel jsem predchozi spatnou zkusenost, tak jsem nechtel omezit stranky pouze na UTF-8. Ale pokud to nebude pusobit zadny problem, budu jedine rad, kdyz budou stranky vzdy v UTF-8. BTW: V JSF jsem zatim stale nenasel moznost definovat kodovani na urovni servletu (ve web.xml aplikace :-( Takze to zatim vypada na uvedeni kodovani v kazdem JSP a nebo rucnim nastavenim do response. A pokud chci pouzit stejne stranky v jine aplikaci s jinym kodovanim, tak to nechci v kazde strance nahrazovat. Tahle veta mne vede k temnemu podezreni, ze ceske znaky mate primo ve zdrojaku JSP stranky, a tudiz se budete za chvili divit, proc jsou misto nich jenom otazniky, kdyz specifikujete vystupni kodovani stranky. To proto, ze vstupni kodovani souboru se zdrojem JSP stranky nesouvisi s vystupnim kodovanim servletu, do ktereho se JSP stranka prelozi. Tim jsem minil, ze jsem nechtel nahrazovat retezec %@ page contentType=text/html;charset=UTF-8 % (Ve strance zadne texty nastesti nejsou.) PavelR