Logo

Apache Wicket

Vytváříme komponenty ve Wicketu

Vložil Pavel Klobasa, 6. Listopad 2008 - 21:00

Teoreticky by se dalo říci, že vytvářet nové komponenty je ve webovém frameworku zbytečnost. Stačí vybrat framework s dostatečným počtem kvalitních komponent a z nich sestavit aplikaci. Realita života je ale jiná – napadají mě přinejmenším tři důvody, proč jsou vlastní komponenty potřeba:

  1. První důvod se jmenuje RIA.
  2. Dobře použitá „nestandardní“ komponenta může velmi zvýšit uživatelskou přívětivost aplikace.
  3. Základním programátorským vzorem je kompozice menší prvků do větších částí – stejně tak i komponenty potřebujeme sdružovat do větších relativně izolovaných provázaných celků. A určitě tyto celky by také měly komponentami.

Tolik filozofický úvod, pojďme k praxi – jak udělat vlastní komponentu ve Wicketu.

Není model jako model

Vložil Pavel Klobasa, 31. Srpen 2008 - 21:30

Důležitým pojmem při vývoji software je model. Zpravidla se tento pojem odkazuje na návrhový vzor MVC. Zdatnější vývojář se pak při vyslovení tohoto pojmu odkáže jednak Swing a jednak na Struts, který model přinesl do světa webového vývoje. Jenže, přiznejme si to, pojmy model a MVC jsou poněkud mlhavé a neurčité. Pojďme se tedy podívat na různé implementace modelu v několika frameworcích – za základ vezmu tři oblíbené: Swing, Spring MVC a Apache Wicket.

Ukázkový příklad – zobrazujeme kočky

Použití modelu bych chtěl ukázat na tabulce, která zobrazuje atributy následující třídy Kočka. (Kočka je užitečná entita – používají ji i autoři dokumentace Spring Frameworku.)

public class Cat {
   String name;
   int age;

   public String getName(){
      return name;
   }
   public void setName(String name){
      this.name=name;
   }

   public int getAge(){
      return age;
   }
   public void setAge(int age){
      this.age=age;
   }
}

AJAX v komponentových frameworcích

Vložil Pavel Klobasa, 5. Červenec 2008 - 15:16

Vytvořit AJAXovou či přímo RIA aplikaci se zdá být snadné – stačí umět JavaScript a HTML a vhodně použít XMLHttpRequest… Jenže tak jednoduché to není. Nedávno jsem nalezl článek, který přirovává problémy AJAXového vývoje k vývoji rezidentních programů v DOSu. (Nevím, jestli ty doby pamatujete: šlo o programy čekající na pozadí na systémové volání OS.) Zde je můj zkrácený překlad:

  • JavaScriptový engine v prohlížeči neumí multithreading (stejně jako DOS).
  • Velikost kódu je limitovaná (v DOS bylo limitem 640kB RAM).
  • JavaScript nepodporuje složitější kolekce, které známe např. z Javy.
  • Na serveru i ve Win32/Linuxové aplikaci si můžete vybrat programovací jazyk.
  • Horší možnosti debuggingu.

Co s tím? Odpověď je jednoduchá a tradiční: využít práce jiných programátorů a použít framework. Chtěl bych v následujícím textu projít několik frameworků. Nejprve ale jednoduchý případ užití, který najdete v každém internetovém autobazaru – a to spřažená komba pro výběr značky a modelu auta:

Jde o to, aby se po výběru značky nabízely jen odpovídající modely aut. Jsou tři možnosti řešení:

  • serverové – po výběru značky překreslí celou stránku
  • javascriptové – po výběru značky JavaScriptový kód prohodí obsah komba s modely
  • AJAXové – po výběru značky odešle požadavek na data na server a stáhne z něj modely aut.

Apache Wicket - moderní webový framework

Vložil Pavel Klobasa, 18. Březen 2008 - 22:05

Vývoj internetových aplikací a vývoj desktopových aplikací jsou dva odlišné světy. Je jen málo programátorů, kteří dobře rozumí obojímu – přechodu z jedné technologie na druhou brání dost vysoká technologická bariéra. Málokdy se proto stane, že by se tyto dva světy navzájem inspirovaly. Jedním z těchto mála případů je komponentový webový framework Apache Wicket.

Komponentová architektura Wicketu připomíná desktopovou knihovnu Swing. Ukažme si to na krátkém příkladu kódu z jedné z ukázek, jak jinak, než na klasickém Hello, world. V následujícím kódu je vytvořen objekt typu Label, a to pro definici komponent jednoduchého příkladu stačí:

import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.examples.WicketExamplePage;

public class HelloWorld extends WicketExamplePage {
    public HelloWorld() {
        add(new Label("message", "Hello World!"));
    }
}

© 2005-2008 oXy Online s.r.o., všechna práva vyhrazena.