С помощьютег для создания частично отформатированного текста - PullRequest
6 голосов
/ 08 декабря 2010

Я читал о wicket:message здесь , но не могу заставить его делать все, что я хотел.

Скажем, у меня есть HTML-страница с <wicket:message key="text"/> и файл свойств, содержащий text=Blah blah: important point, foo bar.Мне интересно, как сделать часть текста жирным шрифтом (или применить к нему произвольный CSS), чтобы добиться вывода вроде:

Бла-бла: важный момент , foo bar

Обратите внимание, что на самом деле ничего из этого не является динамическим , поэтому я бы не хотел ничего делать на Java, если этого можно избежать.

Я пробовал вложить теги с чем-то вроде следующего, но не повезло.

<wicket:message key="text">
    <span class="bold"><wicket:message key="text2"/></span>
</wicket:message>

text=Blah blah: ${text2}, foo bar
text2=important point

Возможно ли это даже в Wicket без 1) инъекции отформатированной части со стороны Java или 2) простого разбиениятекст в (в данном случае) три разных свойства?

Ответы [ 3 ]

4 голосов
/ 16 декабря 2010

Самый простой способ - поместить теги в файл локализации:

text = Бла-бла: text2 , foo bar

Вы также можете использовать Label и ResourceModel, чтобы заменить его позже:

text = Бла-бла: [b] text2 [/ b], foo bar

А в вашей модели getObject () или в вашей метке:

string.replace ("[b]", "");
string.replace ("[/ b]", "
");

Или, что еще лучше, попробуйте повторно использовать реализацию Markdown в вашем Label.

3 голосов
/ 08 декабря 2010

Мне удалось сделать это для моего собственного приложения, хотя и с довольно некрасивым взломом.Я сделал это, выставив настроенную версию WicketMessageResolver.

Вот что попробовать:

Оптовая копия и вставка org.apache.wicket.markup.resolver.WicketMessageResolver в ваш собственный класс (скажем, com.acme.CustomWicketMessageResolver) (хакначинается!)

Внутри вашего CustomWicketMessageResolver измените WicketTagIdentifier.registerWellKnownTagName( "message" ); на что-то еще, например WicketTagIdentifier.registerWellKnownTagName( "msg" );.

Внутри private void renderMessage(final MarkupStream markupStream, final ComponentTag openTag, final String key, final String value) вы найдете строку getResponse().write( text );.

Непосредственно перед этой строкой у вас есть возможность обойти значение "text".Там я делаю что-то вроде text = MyLabelUtils.replaceWikiMarkup(text), которое выполняет постобработку некоторого вики-подобного синтаксиса разметки, используемого авторами контента для моего приложения.

Например, я использую этот метод для получения метки с помощью ResourceModel, указывающего наключ:

propertyKey=I found the answer on [acronym SO].

и отображаем его как

I found the answer on <acronym title="Stack Overflow">SO</acronym>.

, и этот метод обрабатывает i18n и все эти забавные вещи

Конечно, вы можете расширить этот синтаксис вики (или что-то подобное), чтобы он был настолько простым или сложным, насколько вам нужно.

Обратите внимание, что вам придется изменить <wicket:message key='foo'><wicket:msg key='foo> во всех ваших файлах разметки (или, по крайней мере, в тех, где вы хотите такое поведение).

Я бы, очевидно, предпочел более стандартный способ настройки поведения встроенного распознавателя сообщений в калитке,но если вам нужна эта функциональность в крайнем случае, как я сделал, это будет работать на данный момент.

Если вам нужно что-то более стандартное, вы можете поднять проблему в списке рассылки Wicket.Это очень хорошо.

1 голос
/ 29 сентября 2012

Начиная с Wicket 1.4, вы можете вкладывать компоненты в элемент wicket: message.Например:

<wicket:message key="myKey">
  This text will be replaced with text from the properties file.
  <span wicket:id="amount">[amount]</span>.
  <a wicket:id="link">
    <wicket:message key="linkText"/>
  </a>
</wicket:message>

Тогда

myKey=Your balance is ${amount}. Click ${link} to view the details.
linkText=here

и

add(new Label("amount",new Model("$5.00")));
add(new BookmarkablePageLink("link",DetailsPage.class)); 

Результат:

Your balance is $5.00. Click <a href="...">here</a> to view the details.

Так что, возможно, вложение <wicket:message> без компонента может работать также.Не уверен.

Источник: https://cwiki.apache.org/confluence/display/WICKET/Wicket%27s+XHTML+tags#Wicket%27sXHTMLtags-Elementwicket%3Amessage

...