2010-01-18 11 views
14

Czy możliwe jest dynamiczne generowanie znaczników dla MarkupContainer, tj. Bez przechowywania pliku HTML?Dynamic markup in Wicket

Myślałem o czytaniu znaczników jako zwykłego łańcucha z bazy danych, aby zaoferować funkcjonalność podobną do CMS.

+0

Świetnie! Użyję tego z lekkim językiem znaczników JTexy (http://code.google.com/p/jtexy/). –

Odpowiedz

9

Interesujące pytanie i nie jestem pewien, czy jest to możliwe, ale domyślam się, że zacznę od spojrzenia na interfejsy IMarkupLoader i IMarkupResourceStreamProvider oraz zaimplementowanie klas i zobaczenie, jak daleko stąd się dostaniesz.
Byłbym zainteresowany czymkolwiek, co znalazłeś/wdrożyłeś, co faktycznie zostało zrobione!

+4

Dzięki za podpowiedź. Tak to zrobiło! MarkupContainer musi implementować 'IMarkupResourceStreamProvider' i jego metodę' getMarkupResourceStream() '. Ponadto tworzymy klasę, która pochodzi (na przykład) z 'AbstractResourceStream'. Tam możesz zaimplementować metodę, która po prostu zwraca 'InputStream'. 'getMarkupResourceStream()' następnie zwraca instancję tej nowej klasy. Jawadok mówi, że było to nawet przezroczyste dla buforowania. – Wolfgang

+1

Jest to dobrze udokumentowane w przewodniku informacyjnym pod [17.5 Generowanie znaczników HTML z kodu] (http://wicket.apache.org/guide/guide/advanced.html#advanced_5). – aioobe

-1

Innym (prostszy) sposób to zrobić byłoby użyć etykiety z wyłączonym znaczników ucieczce:

Label<String> label = new Label<String>("id", "<a href='....'><span>foo<em>bar</em></span></a>"); 
label.setEscapeModelStrings(false); 
add(label); 

Bądź ostrożny, ponieważ może to prowadzić do naruszenia bezpieczeństwa (HTML/JS zastrzyk).

+0

Dzięki za twój pomysł. Nie jestem pewien, czy tego właśnie szukałem. Chcę używać dynamicznego znacznika do użycia przez MarkupContainer, tj. Oczekuję pewnych znaczników wicket w znacznikach i chcę dodać kolejne komponenty do kontenera, które następnie powinny zostać odwzorowane na te identyfikatory. Obawiam się, że nie jest to możliwe z twoim rozwiązaniem. – Wolfgang

+0

Yup, masz rację, moje złe. – Jawher

+0

To jest naprawdę zły pomysł, biorąc pod uwagę naruszenia bezpieczeństwa, ale także nadużywanie etykiety do wyświetlania zwykłego HTML. – RobAu