2010-01-18 4 views
14

Возможно ли генерировать разметку для MarkupContainer динамически, то есть без сохранения для нее HTML-файла?Динамическая разметка в Wicket

Я думал о чтении разметки в виде простой строки из базы данных, чтобы предложить CMS-подобную функциональность.

+0

Отлично! Я собираюсь использовать это с легким языком разметки JTexy (http://code.google.com/p/jtexy/). –

ответ

9

Интересный вопрос, и я не уверен, что это возможно, но я предполагаю, что вы начнете смотреть на интерфейсы IMarkupLoader и IMarkupResourceStreamProvider и внедрять классы и посмотреть, как далеко вы доберетесь оттуда.
Мне было бы интересно все, что вы найдете/реализуете, что на самом деле это делается!

+4

Спасибо за подсказку. Вот так! MarkupContainer должен реализовать 'IMarkupResourceStreamProvider' и его метод' getMarkupResourceStream() '. Кроме того, вы создаете класс, который выводится (например) из 'AbstractResourceStream'. Там вы можете реализовать метод, который просто возвращает 'InputStream'. 'getMarkupResourceStream()', а затем возвращает экземпляр этого нового класса. Javadoc говорит, что это было даже прозрачно для кэширования. – Wolfgang

+1

Это хорошо описано в справочном руководстве в разделе [17.5 Создание разметки HTML из кода] (http://wicket.apache.org/guide/guide/advanced.html#advanced_5). – aioobe

-1

Другой (проще) способ сделать это было бы использовать ярлык с отключенным экранирования разметки:

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

Будьте осторожны, так как это может привести к нарушению безопасности (HTML/JS инъекции).

+0

Спасибо за вашу идею. Я не уверен, что это то, что я искал. Я хочу использовать динамическую разметку, которая будет использоваться MarkupContainer, т. Е. Я ожидаю определенную калитку: идентификаторы в разметке, и я хочу добавить в контейнер дополнительные компоненты, которые затем должны быть сопоставлены с этими идентификаторами. Я боюсь, что это невозможно с вашим решением. – Wolfgang

+0

Да, ты прав, мой плохой. – Jawher

+0

Это действительно плохая идея, учитывая нарушения безопасности, а также злоупотребление ярлыком для отображения простого HTML. – RobAu

Смежные вопросы