čtvrtek 13. května 2004

JavaScriptové opakování: formuláře

Formuláře jsou legitimní součásti obou podob webu, jak informační tak i té aplikační. Klientské skriptování(JavaScript, JScript) nabízí možnosti jak zpříjemnit a usnadnit uživateli práci s formuláři. Pomocí šikovného klientského skriptu můžeme zkontrolovat vyplněná formulářová data před jejich odesláním, můžeme dosadit předvybraná data nebo provázat závislé rozbalovací nabídky.

Tento článek je prvním ze série článků o práci s formuláři. Cílem celého seriálu je přiblížit práci s formuláři pomocí klienstkého skriptování především pro nováčky. Jdeme na to.

Základní struktura formulářů

Všechny formuláře jsou pro dokument združeny v poli forms, které bývá označováno za kolekci forms. Indexem tohoto pole(od nuly) je vždy název formuláře prezentovaný obsahem atributu name daného elementu form. Vše bude lépe vidět na následujícím příkladu.


<form name="foo" action="foo.do">
<input type="submit" value="ok" />
</form>
<form name="hoo" action="hoo.do">
<input type="submit" value="ok" />
</form>

V tomto případě obsahuje pole forms dva formuláře. Výběr formuláře, se kterým chceme v klientském skriptu pracovat, lze realizovat přes forms třemi způsoby.

Výběr formuláře
  • document.forms["jméno formuláře"]
  • document.forms[pořadový index]
  • document.jméno_formuláře

V našem příkladě bychom první formulář vybrali

  • document.forms["foo"]
  • document.forms[0]
  • document.foo
Čemu se vyhnout

Občas můžeme najít další dva způsoby, které zavedl jako vlastní rozšíření prohlížeč Internet Explorer. První způsob využívá pole all např. document.all.foo nebo document.all["foo"]. V současnosti neni potřeba využívat all

Druhý způsob vychází z toho, že Internet Explorer umožňuje zápis indexu pole s kulatými závorkami. Můžeme se tak setkat s kódem document.forms("foo"), který bude si funkční v Internet Exploreru, ale v Mozille nám přidělá spoustu práce při dohledávání chyby.

Vřele doporučuji se oběma konstrukcím vyhnout. Předcházet chybám v kompatibilitě klientských skriptů při psaní kódu je mnohem levnější, než jejich dohledávání a opravy v běžném provozu.

Formulářové prvky

Každý formulář je tvořen skupinou formulářových prvků(button, checkbox, fileupload, hidden, password, radio, reset, select, submit, text, textarea), která je združena v poli elements. Pole je opět indexováno hodnotou atributu name daného fornulářového prvku.


<form name="regudaje" action="foo.do">
<input type="text" name="jmeno" />
<input type="text" name="prijmeni" />
<input type="submit" value="Registrovat" />
</form>

Výběr formulářového prvku

Výběr konkrétního formulářového prvku je analogický k výběru formuláře s tím rozdílem, že pracujeme s polem elements. Existují opět tři způsoby jak vybrat konkrétní prvek.

  • document.forms["jméno formuláře"].elements["jméno prvku"]
  • document.forms[pořadový index].elements[pořadový index]
  • document.jméno_formuláře.jméno_prvku

Pro výběr formuláře a konkrétního fomulářového prvku můžete využít kombinací předešlých způsobů. Formulář můžeme vybrat indexem a formulářový prvek jménem document.forms[pořadový index].elements["jméno prvku"]. Způsoby, kterým bychom se měli vyhnout jsou stejné jako v případě formulářů.

Procházení formulářových prvků

Součástí mnoha řešení je průchod skupinou formulářových prvků například za účelem jejich kontroly. Průchod si demonstrujeme na předešlém příkladě resp. fomuláři


  <script type="text/javascript">
    elm = document.forms["regudaje"]. elements;
    for(foo = 0; foo < elm.length;foo++){
      elm[foo];//konkrétní element
    }
  </script>

Formulářové prvky se stejným jménem

Někdy máme takovou strukturu formuláře, že jsou jména formulářových prvků stejná. Klasickým případem je výběr realizovaný pomocí radio prvku, jako v následujícím příkladu.


<form name="regudaje" action="foo.do">
 Muž:<input type="radio" name="pohlavi" value="0"/>
 Žena:<input type="radio" name="pohlavi" value="1"/>
<input type="submit" value="Registrovat" />
</form>

Pokud budeme prvky vybírat pomocí jejich indexu bude vše odpovídat předchozímu chování, které jsem si popsali. Na indexu 0 bude první radio a na indexu 1 bude druhé radio. Pokud se rozhodneme pro změnu výběru formulářových prvků a zvolíme indexaci jménem, pak musíme počítat s tím, že prvky se stejným jménem(shoda hodnoty atributu name) budou dále indexovány číslem v rámci jména viz. následující příklad


  <script type="text/javascript">
    /*
     * elm1 indexem
     * elm2 jmenem 
     */ 
    elm1 = document.forms["regudaje"].elements[0];
    elm2 = document.forms["regudaje"].elements["pohlavi"];
    alert(elm1 == elm2);// false - neukazuje na stejný prvek
    
    elm2 = document.forms["regudaje"].elements["pohlavi"][0];
    alert(elm1 == elm2);// true - ukazuje jiz na stejný prvek
  </script>

Stejně pojmenované formulářové prvky mohou občas způsobovat problémy, pokud si neuvědomíme, že jsou indexovány ještě v rámci jména. Tímto bych první opakování z formulářů zakončil, příště si ukážeme práci s atributy formuláře, přenos formulářových dat mezi okny a další užitečné rady při práci s formuláři.

středa 12. května 2004

Nový Blogger.com - ošklivé káčátko?

Blogovací systém Blogger, který byl tento týden spuštěn s novým hávem a novými funkcemi, sklidil pochvalné reakce v příspěvcích Adama Javůrka Blogger.com v novém - a lepším! a Radka Hulána Blogger.com - výborný systém od Google!. Moje zkušenost s novými funkcemi Blogger je mnohem horší, Dagblog je právě na tomto blogovacím/publikačním systému provozován.

Od pondělí mi Blogger připravil několik horkých chvil a stál mě spoustu času. Toliko vyzdvihované funkce jako komentáře nebo archivace po jednotlivých příspěvcích jsou spíše noční můrou, ale pěkně po pořádku.

Archivní stránka
Blogger měl šablonu pomocí, které bylo možné definovat archivní stránku. Archivní stránka mohla obsahovat odkazy na starší příspěvky podle zvolené periodicity(den, týden, měsíc). Nový Blogger by tuto možnost měl mít také(obrázek), ale pro mě z nepochopitelných důvodů se tato možnost v publikačním rozhraní nezobrazuje. Možnost nastavit tuto šablonu a tím pádem vytvořit archivní stránku tak chybí.
Archivace po jednotlivých příspěvcích
Každý příspěvek má vlastní stránku, URL je ve tvaru http://xyz/rok/mesic/titulek-příspěvku. Archivace po jednotlivých příspěvcích má hned několik nevýhod a lze ji naštěstí vypnout. Největší nevýhodou je duplicita, která vzniká tím, že příspěvek existuje v archívu a zároveň má vlastní stránku. Další nevýhodou je jméno stránky tvořené titulkem příspěvku. Autoři zřejmě nepočítali stím, že budou titulky tvořeny jiným jazykem než anglickým. Pro titulek Dobrá rada nad zlato: vylepšujeme kód bude vygenerována stránka dobr-rada-nad-zlato-vylepujeme-kd-vte.html. Další nevýhodou je obrovské množství souborů, které se generují a nahrávají přes FTP při republikoci. Dagblog má kolem 240 příspěvků což odpovídá vygenerování 240 souboru a to ani nepočítám generování archívů viz. duplicita, republikování zabralo zhruba kolem 45 minut.
Komentáře
Prvním velkým zklamáním je to, že komentáře jsou pouze k příspěvkům publikovaným přes nové rozhraní u starších příspěvků prostě chybí. Zde je možná chyba v hlavní šabloně Dagblogu, ale přes veškerou snahu se mi to narozdíl od Jirky Hradila nepovedlo. Další nevýhodou je způsob komentování, pokud nejste registrovaní uživatelé Bloggeru můžete komentovat pouze anonymně a nemáte možnost zapsat jméno, email, web. Komentáře jsou provázány s archivací po jednotlivých příspěvcích, pokud chcete používat komentáře musíte mít zapnutou archivaci po jednotlivých příspěvcích.

Na druhou stranu Blogger přinesl nové šablony vzhledu(na jednu se zrovna díváte), profily a další maličkosti jako například nové webové rozhraní. Moje osobní pocity jsou velice rozporuplné, na jednu stranu je vidět, že se na Bloggeru hodně zapracovalo a byly dotaženy vlastnosti, které chyběly(komentáře, zpráva příspěvků, preview) na druhou stranu mi přijde, že některé vlastnosti nejsou dotaženy do konce a čeká se na reakce od uživatelů.

Velcí hráči proti JDO

V souvislosti s J2EE 1.5, která bude zaměřena na vývojáře zvláště s důrazem na ulehčení vývoje a používání, se na pořadu dne objevila otázka datové tzv. persistance vrstvy.

Pravděpodobnou cestou bude oprášení technologie EJB v novém hávu s pořadovým číslem 3.0, o které informoval Pavel Kolesnikov v příspěvcích EJB 3.0 poprvé odhaleno světu! a Entity beans v EJB 3.0.

Je velice zajímavé, že robustnost a systémová nenažranost byla hlavním problémem EJB a proto vznikaly odlehčené frameworky jako Hibernate. Dalším krokem bylo adoptování JDO(Java Data Objects) jako dalšího standardu pro persistance vrstvu.

Právě J2EE 1.5 a sni spojené EJB 3.0 je důvodem pro IBM, BEA, a Oracle pro zamítavý postoj k JDO 2.0, který projevili při hlasování v rámci JSR #243 Java Data Objects 2.0 - An Extension to the JDO specification JSR Review Ballot. Velká diskuse se kolem tohoto hlasování rozpoutala na serveru TheServerSide v příspěvku JDO 2 Ballot Results: Concerns from IBM, BEA, and Oracle.

pondělí 10. května 2004

Dobrá rada nad zlato: vylepšujeme kód

Víte jak se pozná zkušený vývojář(mazák) od začátečníka? Teď to nemyslím nijak hanlivě, každý někdy začínal a všichni se pořád učíme. Mazáka poznáte při pohledu do jeho kódu a proč právě při pohledu do jeho kódu?

Existují určité postupy a návyky pro zlepšení kódu, které se dají získat dvěma způsoby. První, trochu bolestný je metodou čistě praktickou, musíme napsat tolik kódu, abychom zjistili, že cesta, kterou jsme se vydali není správná. Druhy, mnohem zajímavější je metodou načerpání informací z odborných článků a knih. Předešlými řádky jsem nevyřknul nic nového, ale dovolte mi, abych tu myšlenku trochu rozvedl.

Mnoho rad je tak obecných, že bez dalšího výkladu se jejich hodnota vytrácí nenávratně pryč. Kdybych měl uvést příklady z Javy, tak se mi vybaví, nepoužívejte sčítaní Stringu, použijte StringBuffer, dodržujte kontrakty metod, viz. equals a hashCode, pište JavaDoc k veřejnému API používejte kontrolované výjimky atd. Všechno to jsou rady, které jste možná slyšeli, ale dokážete si za ně dosadit důvody proč se jich držet?

Jednou ze studnic užitečných rad, kterou jsem našel, je kniha Joshuy Blocha Effective Java Programming Language Guide, která vyšla v překladu pod názvem JAVA efektivně,57 zásad softwarového experta. Původním impulsem k tomuto spotu, byly rady z knihy Robert Simmons, Jr. Hardcore Java, na kterou upozorňuje článek Seven Low-Cost Ways to Improve Legacy Code.

Když už jsem u těch knih, zdá se mi to a nebo Vám taky chybí rezenze na knihy o Jave?