Tvorba dekorátorů

Dekorátory nejsou nic jiného, než běžné JSP stránky [4] obsahující uživatelské značky rámce SiteMesh. Běžnou praxí bývá použití více dekorátorů použitých v jedné aplikaci, kde společné části těchto dekorátorů jsem zachyceny v pomocných souborech a includovány do dekorátorů pomocí běžné syntaxe jazyka JSP.

<%@ page session="true" contentType="text/html; 
         charset=utf-8" pageEncoding="utf-8" %>
<%@ taglib prefix="page" 
           uri="http://www.opensymphony.com/sitemesh/page" %>
<%@ taglib prefix="decorator" 
           uri="http://www.opensymphony.com/sitemesh/decorator" %>
<%@ taglib prefix="c" 
           uri="http://java.sun.com/jstl/core" %>
 
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
      "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" >
<head>
  <meta http-equiv="Content-Type" 
        content="text/html; charset=utf-8" />

  <decorator:usePage id="myPage" />

  <title><decorator:title /> 
         <c:if test="${not empty myPage.title}">|</c:if> 
         Sportoviny | sportovní výsledky snadno a rychle
  </title>
  
  <link rel="stylesheet" type="text/css" media="screen" 
        href="<c:url value='/css/style.css' />" />

  <meta name="author" 
        content="<decorator:getProperty property="meta.autor" 
        default="MoroSystems" />">

  <decorator:head />

</head>
<body id="<decorator:getProperty property="body.id" />">
  
  <div id="content">
    
  <decorator:body />

  <%@ include file="/WEB-INF/decorators/include/footer.jsp" %>

Na příkladu vidíme ukázku dekorátoru public.jsp tak, jak jej můžeme najít v naší aplikaci. Na této ukázce si ukážeme a popíšeme jednotlivé uživatelské značky našeho rámce.

Nejdříve musíme v daném dekorátoru definovat použití uživatelských značek. Definujeme obecné dekorátory (s předponou uživatelských značek „decorator“), stránkové dekorátory (s předponou uživatelských značek „page“). Pro úplnost dodejme, že uživatelské značky začínající prefixem „c“ jsou základní značky knihovny JSTL [3].

Jak už jsme si naznačili dříve, uživatelské značky mají přístup k objektu implementující rozhraní Page, tedy parsovanému obsahu cílové stránky, odkud čerpají data. Zde je seznam globálních uživatelských značek rámce SiteMesh.

<decorator:head />

Uživatelská značka, která přistupuje k obsahu elementu <head> požadované stránky.

<decorator:body />

Uživatelská značka pro přístup k obsahu elementu <body> cílové stránky.

<decorator:title [ default="..." ] />

Uživatelská značka pro přístup k obsahu elementu <title>. Pokud není <title> cílové stránky nastaven, můžeme atributem default určit implicitní hodnotu této značky.

<decorator:getProperty property="..." [ default="..." ] />

Uživatelská značka pro přístup k vlastnostem požadované stránky. Tímto způsobem lze získat hodnoty všech atributů uvedených v elementech <head>, <title>, <body> a hodnoty všech <meta> elementů.

Atribut property je klíčem k těmto vlastnostem. Pokud budeme chtít např. přistoupit tímto způsobem k atributu author <meta> elementu, musíme použít zápis <decorator:getProperty property="meta.author" />.

V případě, že cílová stránka obsahuje element <meta name="author" content="Tomáš Páral" /> bude výslednou hodnotou řetězec "Tomáš Páral". V případě, že se zmíněný element v cílové stránce nevyskytuje, bude vrácen prázdný řetězec, případně implicitní hodnota atributu default za předpokladu, že tento parametr je nastaven. V našem případě tedy hodnota "MoroSystems".

<decorator:usePage id="..." />

Vloží naplněný objekt implementující rozhraní Page do dekorátoru. Tento objekt bude od té chvíle plně k dispozici běžným konstrukcím jazyka JSP.

V našem případě vložíme naplněný objekt implementující třídu Page do dekorátoru pod jménem myPage. Potom jej využíváme k testování prázdnosti elementu <titlle> požadované stránky.

Druhou skupinou značek jsou stránkové uživatelské značky, které slouží pro dekoraci vnitřního i vnějšího obsahu stránek.

<page:applyDecorator name="..." [ page="..." title="..." ] > ..... </page:applyDecorator>

Uživatelská značka pro dekorování vnitřního obsahu stránky uzavřeného v těle této značky nebo pro dekorování externích stránek odkazovaných atributem page.

Parametr name určuje jméno dekorátoru aplikovaného na tento obsah.

Parametr page určuje externí stránku, jejíž obsah bude dekorován.

Parametr title překryje obsah elementu <title> požadované stránky, který bude vrácen metodoui Page.getTitle() nebo uživatelskou značkou <decorator:title/>.

<page:param name="..."> ... </page:param>

Uživatelská značka pro překrytí hodnot parametrů požadované stránky přístupných v dekorátoru pomocí metody Page.getProperty() či uživatelské značky <decorator:getProperty/>. Platné použití této značky je pouze uvnitř značky <page:applyDecorator>.

Stránkové uživatelské značky nemají takové uplatnění jako globální uživatelské značky a ani v naší aplikaci jsme je nepoužili. Pokud bychom však chtěli integrovat více aplikací do jednoho grafického návrhu, poté bychom se bez nich neobešli.

Komentáře

Téma neobsahuje žádné komentáře.

Vložit komentář

Můžete používat značkovací jazyk Texy!


Jméno:
E-mail:
Url:
Komentář:
1 + 2 =
 
MoroSystems, s.r.o.