Sitemesh - decodery ve freemarkeru
Petr Pokorný
toneofwinds na gmail.com
Čtvrtek Únor 26 10:25:42 CET 2009
Tak jsem to vyzkousel jen s *.dec a bez uspechu. Neklikrat jsem to zkousel prepisovat, z meho pohledu na jednodusi zapisy a taky nic.
Tak to prozatim necham pres filter a zkusim se k tomu vratit az budu mit vice zazitych informaci ohledne mapovani servletu.
Petr a diky za informace
-----Original Message-----
From: konference-bounces na java.cz [mailto:konference-bounces na java.cz] On Behalf Of Filip Jirsák
Sent: Wednesday, February 25, 2009 2:03 PM
To: Java
Subject: Re: Sitemesh - decodery ve freemarkeru
Filtr to obsluhuje správně, protože má vzor "/*" -- takže se má
aplikovat na vše mimo pojmenovaných servletů. Pokud jej vyřadíte,
zobrazí se zdroj Freemarkeru z toho důvodu, že posíláte .dec soubor,
který neodpovídá žádné cestě servletu, takže jej odešle výchozí
servlet jako běžný soubor.
Nevím přesně, jak fungují dekorátory a jejich vzory -- předpokládám,
že je přeposlání (forward) v rámci servlet kontejneru. Pokud se jako
vzory pro URL používá stejná syntaxe jako pro servlety a filtry, pak
"/*.dec" je špatně a mělo by to být "*.dec" bez lomítka. Vzory
začínají buď lomítkem a pak je to buď přesná shoda (pokud vzor nekončí
hvězdičkou), nebo předpona cesty (pokud cesta končí hvězdičkou). Druhý
typ vzorů začíná hvězdičkou a určuje "příponu souboru" (postfix
cesty). Ve vzorech pro servlety a filtry tedy nikdy nemůže být
hvězdička uprostřed vzoru. Je ale možné, že Sitemesh používá jiný
způsob rozpoznávání vzorů.
Filip Jirsák
Dne 25. únor 2009 13:08 Petr Pokorný <toneofwinds na gmail.com> napsal(a):
> V tom pipade napisi muj priklad jelikoz si to potrebuji ujasnit na necem jednoduchem...
>
> Toto je web.xml ...funkcne nastavene na filtruj vsechno
>
> <?xml version="1.0" encoding="UTF-8"?>
> <web-app xmlns="http://java.sun.com/xml/ns/javaee"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
> http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
> version="2.5">
>
> <!-- Filter for Sitemesh -->
> <filter>
> <filter-name>sitemesh</filter-name>
> <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
> </filter>
>
> <servlet>
> <servlet-name>sample</servlet-name>
> <servlet-class>
> org.springframework.web.servlet.DispatcherServlet
> </servlet-class>
> <load-on-startup>1</load-on-startup>
> </servlet>
>
> <servlet-mapping>
> <servlet-name>sample</servlet-name>
> <url-pattern>/sample/*</url-pattern>
> </servlet-mapping>
>
> <!-- All requests should go through sidemesh filter -->
> <filter-mapping>
> <filter-name>sitemesh</filter-name>
> <url-pattern>/*</url-pattern>
> </filter-mapping>
>
> <context-param>
> <param-name>contextConfigLocation</param-name>
> <param-value>
> /WEB-INF/applicationContext*.xml
> </param-value>
> </context-param>
> <listener>
> <listener-class>
> org.springframework.web.context.ContextLoaderListener
> </listener-class>
> </listener>
> </web-app>
>
> Decorator ma cestu k souboru
> <decorators>
> <decorator name="meDecorator" page="/decorators/decorator.jsp">
> <pattern>*</pattern>
> </decorators>
>
> A ve springu je jen definice url na controller ktery zobrazuje jednoduchy freemarker template...
>
> A pokud toto pridam do web.xml
>
> <!--Declare servlet for handling freemarker requests -->
> <servlet>
> <servlet-name>sitemesh-freemarker</servlet-name>
> <servlet-class>com.opensymphony.module.sitemesh.freemarker.FreemarkerDecoratorServlet</servlet-class>
> <init-param>
> <param-name>TemplatePath</param-name>
> <param-value>/decorators/</param-value>
> </init-param>
> <init-param>
> <param-name>default_encoding</param-name>
> <param-value>ISO-8859-1</param-value>
> </init-param>
> </servlet>
>
>
> <servlet-mapping>
> <servlet-name>sitemesh-freemarker</servlet-name>
> <url-pattern>*.dec</url-pattern>
> </servlet-mapping>
>
> A toto do decoderu.xml
>
> <decorator name="frDecorator" page="/decorators/freemarkerDec.dec">
> <pattern>/*.dec</pattern>
> </decorator>
>
> Pokud to volam /sample/index.dec
>
> Tak to prevezme filter a ne sitemesh-freemarker
> A bez filteru sitemesh to zobrazi oroginal freemarker template.
>
> Premyslim zda jen nechapu jak poskladat vice filteru, a servletu dohromady.
>
> Diky za odpoved
>
> -----Original Message-----
> From: konference-bounces na java.cz [mailto:konference-bounces na java.cz] On Behalf Of Filip Jirsák
> Sent: Wednesday, February 25, 2009 12:26 PM
> To: Java
> Subject: Re: Sitemesh - decodery ve freemarkeru
>
> Dobré odpoledne,
> nevím, jaký případ řešíte konkrétně, ale obecně to funguje tak, že
> servlet engine postupně prochází filtry odpovídající danému URL v
> pořadí, v jakém jsou definovány, a nakonec (pokud zpracování nějaký
> filtr nepřeruší nebo nepřesměruje jinam) se řízení předá jedinému
> servletu, jeho vzor URL nejlépe odpovídá požadovanému URL. Jak přesně
> se stanovuje, zda filtr patří k danému URL nebo ne a jak se stanovuje
> pořadí toho, zda URL odpovídá vzoru servletu, najdete ve specifikaci,
> není to zas tak jednoduché.
>
> Pokud například nastavíte Freemarker, aby zpracovával cestu *.ftl, a
> příslušné šablony nebudou v cestě, jejíž prefix by zpracovával nějaký
> jiný servlet (např. nebudou v cestě /sablony/sablona.ftl v prípadě,
> kdy existuje servlet pro cestu /sablony/*), stačí zavolat cestu s
> koncovkou .ftl a příslušný soubor bude zpracován Freemarkerem.
>
> S pozdravem
>
> Filip Jirsák
>
> Dne 25. únor 2009 11:42 Petr Pokorný <toneofwinds na gmail.com> napsal(a):
>> Zdravim konferenci,
>> potrebuji poradit o Sitemesh jako serveltu freemarkeru.
>>
>> Mam rozchozeny projekt kde mam Spring, freemarker a Sitemesh jako filtr.
>> Funguje to bez probelmu. Dekodery jsou psane v JSP.
>> Nejak si nedokazi dat dohroamdy, pridani servletu- freemarkeru, tak aby jsme
>> mohli psat dekodery taky ve freemarkeru.
>>
>> Koukal jsem se na stranky Sitemesh, a vzal si tam ten jejich priklad a uz
>> nekolikaty den to resim, bud si nedokazi poskladat jak pospolu funguje vice
>> servletu a filter .. nebo tam mam nejakou jinou chybu.
>>
>> Mate nekdo o tom prehled, aby jste poradil jak to jednoduse s ungujiciho
>> filteru prevest na freemarker servlet decoder?
>>
>> Diky za podporu
>>
>>
>> Jsem spozdravem Petr Pokorny
>>
>>
>> __________ Informace od ESET Smart Security, verze databaze 3876 (20090221)
>> __________
>>
>> Tuto zpravu proveril ESET Smart Security.
>>
>> http://www.eset.cz
>>
>>
>>
>
>
>
> --
> Filip Jirsák
> filip na jirsak.org
>
>
> __________ Informace od ESET Smart Security, verze databaze 3876 (20090221) __________
>
> Tuto zpravu proveril ESET Smart Security.
>
> http://www.eset.cz
>
>
>
--
Filip Jirsák
filip na jirsak.org
Další informace o konferenci Konference