Slevový týden - Březen C# týden
Využij náš slevový týden a získej až 30 % bodů navíc zdarma! Zároveň také probíhá C# týden se slevou na e-learning až 80 %
Hledáme fulltime programátora do ITnetwork týmu -100% homeoffice, 100% časově flexibilní #bezdeadlinu Mám zájem!

Lekce 4 - Wicket - Titulek, styly, obrázky

V předchozím díle, Wicket - HTML dědičnost a odkazy, jsme skončili sice s funkční, ale ne příliš hezkou, webovou aplikací.

Nejdříve se zaměříme na titulek stránky. Ten je napevno nastaven ve třídě BasePage v části head.

<head>
<meta charset="UTF-8">
<title>Titulek</title>
</head>

Tím pádem se zobrazuje jak pro HomePage, tak pro PhotosPage. Ideální by ale bylo mít titulek vztahující se k zobrazené stránce.

Pokud bychom změnili titulek např. v HomePage.html, k žádné změně v zobrazení popisku by nedošlo. HomePage dědí z BasePage a na místo v BasePage.html určené tagem <wicket:child/> se vloží pouze ta část .html souboru potomka uvedená mezi tagy <wicket:extend> a </wicket:extend>. Nic víc.

Na to se hodí komponenta Label, která se používá pro vkládání textu do html. V .html do tagu přidáme atribut wicket:id="title" a v .java vytvoříme Label s id "title" a druhým parametrem modelem a vložíme jej do stránky pomocí add(). Tyto změny je potřeba provést v BasePage. Jak ale do BasePage.class dostat řetězec z HomePage.class a PhotosPage.class? Pomocí Javy..

BasePage.class pozměníme na abstract. Přidáme do ní abstraktní metodu např. getTitle(). Jelikož je to abstraktní metoda, třídy, které dědí z BasePage.class, ji budou nuceny implementovat. Tato metoda implementována v potomcích bude vracet titulek specifický pro danou stránku. Dále ještě v konstruktoru BasePage.class vytvoříme Label a předáme mu řetězec reprezentující titulek. Jen drobné upozornění - jedná se o org.apache.wic­ket.markup.html­.basic.Label a ne o java.awt.Label. To platí pro všechny komponenty. Pozor na automatické doplňování importů v IDE.

Model představuje objekt, který poskytuje komponentě data. Můžeme si sice napsat vlastní modely, ale pro nejčastější situace má Wicket již modely připravené. Velmi často potřebujeme zobrazit nějaký statický text. Model pro vracení textu vlastně používá pouze metodu getObject(), která vždy vrací stejný řetězec. Takovýto model je již ve Wicketu předpřipravený. Stačí napsat new Model("retězec") a máme model hotov.

BasePage.java

public abstract class BasePage extends WebPage {

    public BasePage() {
        Link homePageLink = new Link("homePage") {
            @Override
            public void onClick() {
                setResponsePage(HomePage.class);
            }
        };
        add(homePageLink);

        Link photosPageLink = new Link("photosPage") {
            @Override
            public void onClick() {
                setResponsePage(PhotosPage.class);
            }
        };
        add(photosPageLink);

        Label titleLB = new Label("title", new Model(getTitle()));
        add(titleLB);
    }

    public abstract String getTitle();
}

BasePage.html

<head>
<meta charset="UTF-8">
<title wicket:id="title"></title>
<link >
</head>
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

HomePage.java

public class HomePage extends BasePage {

    public HomePage() {

    }

    @Override
    public String getTitle() {
        return "Domovská stránka";
    }
}

PhotosPage.java

public class PhotosPage extends BasePage {

    public PhotosPage() {

    }

    @Override
    public String getTitle() {
        return "Fotky";
    }
}

Jako další krok změníme BasePage.html. Do nadpisu místo "Header" napíšeme "Můj Web" a nadpisy s texty "Content" a "Footer" odstraníme.

Také přidáme kaskádové styly.

BasePage.html

<head>
<meta charset="UTF-8">
<title wicket:id="title"></title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>

style.css

body {
  font-family: Sans-Serif;
  margin: 0px;
  padding: 0px;
}

#body {
    width: 60%;
    min-width: 600px;
    margin-left: auto;
    margin-right: auto;
}

h1 {
    font-size: 120%;
    border-bottom: 2px solid black;
}

h2 {
    font-size: 110%
}

.message {
    border-bottom: 1px solid black;
}

#menu ul {
    margin: 0px;
    padding: 0px;
}

#menu ul li {
    list-style: none;
    display: inline-block;
}

#menu ul li a {
    text-decoration: none;;
    color: black;
    border: 1px solid black;
    padding: 5px;
}

#menu ul li a:hover {
    background-color: #ccc;
}

#footer {
    border-top: 2px solid black;
}

Přidáme obsah do HomePage.html (a odstraníme nadpis).

<body>
    <wicket:extend>
        <div class="message">
            <h2>Trocha kultury neuškodí</h2>
            <p>
                <span class="date">09.11.2014</span>
            </p>
            <p>Musím přiznat, že jsem fanouškem animovaných filmů, a proto
                jsem se nemohl dočkat pokračování filmu "Jak vycvičit draka". Dvojka
                je konečně v kinech a po shlédnutí mohu říci: "Dobrý".</p>
        </div>

        <div class="message">
            <h2>Výlet na Broumovsko</h2>
            <p>
                <span class="date">28.10.2014</span>
            </p>
            <p>Podzim je již v plném proudu a vzhledem k tomu, že počasí se
                umoudřilo, rozhodl jsem se pro krátký výlet na Broumovsko. Barevné
                listí, skály, vítr a ostré podzimní slunce. Výborný relax.</p>
        </div>
    </wicket:extend>
</body>

Máme stránku s názvem "Fotky", ale zatím je prázdná. V této části si ukážeme, jak pracovat s obrázky ve Wicketu.

Obrázky

Tak jako u odkazů, tak i u obrázků, existuje několik způsobů jak je vložit do stránky. Nejjednodušším je použití klasického html. Nejdříve vložíme na naši stránku logo.

BasePage.html

<div id="header">
    <h1><img src="logo.png" alt="Můj Web" title="Můj Web"/></h1>
</div>

Obrázek logo.png pak musí být umístěn ve složce webapp (ve stejném umístění jako soubor s kaskádovými styly).

Další způsob je použítí package resource. Pomocí tohoto způsobu vložíme obrázky na stránku PhotosPage.

PhotosPage.java

public PhotosPage() {
    PackageResourceReference ref01 = new PackageResourceReference(getClass(), "image.png");
    add(new Image("img01", ref01));

    PackageResourceReference ref02 = new PackageResourceReference(getClass(), "image2.png");
    add(new Image("img02", ref02));
}

PhotosPage.html

<wicket:extend>
    <h2>Fotky</h2>

    <img wicket:id="img01"/>
    <img wicket:id="img02"/>
</wicket:extend>

V tomto případě je třeba obrázky třeba umístit v složce (package), kde se nachází java třída (cz.mujweb.pho­tospage).

To je pro dnešek vše.

Příště, Wicket - Internacionalizace a lokalizace, se podíváme na to, jak vytvořit vícejazykový web.


 

 

Aktivity (2)

 

 

Komentáře

Avatar
Rostislav Janda:7.1.2019 13:13

Pokud se nepletu, PackageResource­Reference je deprecated, je třeba použít ResourceReference.

Jinak díky za tutorial!

 
Odpovědět
7.1.2019 13:13
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.