我已经阅读过关于wicket:message
here的内容,但似乎无法让它做我想做的一切。
假设我有一个包含<wicket:message key="text"/>
的HTML页面和一个包含text=Blah blah: important point, foo bar
的属性文件。我想知道如何将文本的部分加粗(或对其应用任意CSS),以实现如下输出:
Blah blah:重点,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)只是将文本分成(在这种情况下)三个不同的属性?
答案 0 :(得分:4)
最简单的方法是将标记放在本地化文件中:
text = Blah blah:&lt; strong&gt; text2&lt; / strong&gt ;, foo bar
您也可以使用Label和ResourceModel稍后替换它:
text = Blah blah:[b] text2 [/ b],foo bar
在你的模型getObject()或你的Label中:
string.replace(“[b]”,“&lt; strong&gt;”);
string.replace(“[/ b]”,“&lt; / strong&gt;”);
或者,更好的是,尝试在Label中重用Markdown实现。
答案 1 :(得分:3)
我已经设法为我自己的应用程序做了这个,虽然有一个相当丑陋的黑客。我通过暴露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)
的操作,后者处理内容作者为我的应用程序使用的一些类似wiki的标记语法。
例如,我使用此方法使用指向键的ResourceModel获取Label:
propertyKey=I found the answer on [acronym SO].
并将其渲染为
I found the answer on <acronym title="Stack Overflow">SO</acronym>
。
并且该方法处理i18n以及所有有趣的东西。
当然,您可以将wiki语法(或类似内容)扩展为您需要的简单或复杂。
请注意,您必须在所有标记文件中更改<wicket:message key='foo'>
至<wicket:msg key='foo>
(或至少在您希望出现此行为的文件中)。
我显然更喜欢使用更标准的方式来自定义内置的消息解析器的行为,但如果你需要这个功能,就像我一样,这将暂时有效。
如果您需要更标准的内容,可以在Wicket邮件列表中提出问题。这很不错。
答案 2 :(得分:1)
从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>
也可以。不确定。