Apache Wicket:具有嵌入式HTML的消息的动态密钥

克里斯多夫·L

Wicket支持复杂的可翻译消息,其中包含HTML元素(如链接等),如https://cwiki.apache.org/confluence/display/WICKET/Everything+about+Wicket+internationalization中所述,使用wicket:message。例如:

<wicket:message key="messageKey">
    <a wicket:id="link"><wicket:message key="linkLabel"></wicket:message></a>
</wicket:message>

和属性:

messageKey=Click on ${link}

和在Java中

add(new BookmarkablePage<Void>("link", SomePage.class);

这很好用,但是消息键是硬编码在HTML中的。

就我而言,我希望在Java中动态确定消息密钥。对于常规消息(带有字符串参数),我可以使用aLabel和aStringResourceModel将键作为参数。但是,对于包含Wicket组件作为参数的消息,我该怎么做?我猜标记看起来像这样:

<span wicket:id="messageId">
    <a wicket:id="link"><wicket:message key="linkLabel"></wicket:message></a>
<span>

但是Java是什么呢?Label不能有孩子。:(

===更新===

有一个org.apache.wicket.markup.resolver.WicketMessageResolver.MessageContainer看起来很有趣的Wicket类由于它是私有静态的,因此我不能直接使用它,但是如果我将代码复制粘贴到公共类中并调整与组件层次结构有关的几件事,那么我将接近解决方案。但是,这很hacky。有没有更清洁的解决方案?

克里斯多夫·L

我最终复制/修改了Wicket的私有类MessageContainer(嵌套在org.apache.wicket.markup.resolver.WicketMessageResolver中),如下所示:

https://gist.github.com/totof3110/cf5f05731816a58d8597

然后,我可以像这样编写Java代码:

final String messageKey;
if (userLoggedIn) {
    messageKey = "logged.in";
} else {
    messageKey = "logged.out";
}
MessageContainer message = new MessageContainer("message", messageKey);
BookmarkablePageLink<Void> link = new BookmarkablePageLink<Void>("link", UserProfilePage.class);
link.add(new Label("username", user.getUsername());
message.add(link);
add(message);

HTML看起来像:

<span wicket:id="message">
    <a wicket:id="link"><span wicket:id="username"></span></a>
</span>

属性文件如下所示:

logged.in = ${link} logged in.
logged.out = ${link} logged out.

根据userLoggedIn是true还是false,呈现的HTML将如下所示:

<a href="/profile">totof3110</a> logged in.

或者

<a href="/profile">totof3110</a> logged out.

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Apache代理后面具有嵌入式Tomcat的Spring Boot

来自分类Dev

Apache Drill嵌入式和分布式系统

来自分类Dev

Apache Drill嵌入式和分布式系统

来自分类Dev

具有嵌入式tomcat和apache http服务器的端口绑定,负载平衡器和横向扩展体系结构

来自分类Dev

Apache Kafka-没有密钥的消息

来自分类Dev

嵌入式Jetty服务器-没有对/的JSP支持,找不到org.apache.jasper.servlet.JspServlet

来自分类Dev

Maven嵌入式部署不适用于org.apache.httpcomponents.httpclient版本4.4

来自分类Dev

Apache Jackrabbit-standalone中使用的嵌入式服务器是什么?

来自分类Dev

使用buildroot构建的嵌入式apache Web服务器中的PHP

来自分类Dev

Apache FTP嵌入式服务器可侦听特定IP

来自分类Dev

EJB注入Apache Wicket

来自分类Dev

Apache Wicket 9.1 CSRF

来自分类Dev

Apache Wicket DateTextField清除

来自分类Dev

Jacoco 对 apache wicket 的支持?

来自分类Dev

如何将简单的Spring Boot(带有Gradle构建系统)部署到Apache Tomcat(真实服务器,而不是嵌入式服务器)?

来自分类Dev

具有多种消息类型的嵌入式 RTOS 生产者和消费者

来自分类Dev

在Apache Wicket组件中包含HTML

来自分类Dev

带有嵌入式API密钥的静态API文档

来自分类Dev

带有嵌入式API密钥的静态API文档

来自分类Dev

具有动态主机名的Apache ProxyPass

来自分类Dev

具有动态子域的 Apache 虚拟主机

来自分类Dev

Apache Flink 动态管道

来自分类Dev

嵌入式Tomcat 8-错误{org.apache.catalina.core.ContainerBase}-子容器在启动期间失败

来自分类Dev

Apache UIMA与Apache Opennlp有何不同

来自分类Dev

Apache Apex与Apache Storm有何不同?

来自分类Dev

如何在具有嵌入式密钥的Windows 8.1 OEM 64位上安装Windows 10 32位光盘?

来自分类Dev

通过CSS修改具有某些HTML属性的嵌入式元素

来自分类Dev

带有嵌入式表的动态SQL

来自分类Dev

具有嵌入式Jetty的异步Servlet

Related 相关文章

  1. 1

    在Apache代理后面具有嵌入式Tomcat的Spring Boot

  2. 2

    Apache Drill嵌入式和分布式系统

  3. 3

    Apache Drill嵌入式和分布式系统

  4. 4

    具有嵌入式tomcat和apache http服务器的端口绑定,负载平衡器和横向扩展体系结构

  5. 5

    Apache Kafka-没有密钥的消息

  6. 6

    嵌入式Jetty服务器-没有对/的JSP支持,找不到org.apache.jasper.servlet.JspServlet

  7. 7

    Maven嵌入式部署不适用于org.apache.httpcomponents.httpclient版本4.4

  8. 8

    Apache Jackrabbit-standalone中使用的嵌入式服务器是什么?

  9. 9

    使用buildroot构建的嵌入式apache Web服务器中的PHP

  10. 10

    Apache FTP嵌入式服务器可侦听特定IP

  11. 11

    EJB注入Apache Wicket

  12. 12

    Apache Wicket 9.1 CSRF

  13. 13

    Apache Wicket DateTextField清除

  14. 14

    Jacoco 对 apache wicket 的支持?

  15. 15

    如何将简单的Spring Boot(带有Gradle构建系统)部署到Apache Tomcat(真实服务器,而不是嵌入式服务器)?

  16. 16

    具有多种消息类型的嵌入式 RTOS 生产者和消费者

  17. 17

    在Apache Wicket组件中包含HTML

  18. 18

    带有嵌入式API密钥的静态API文档

  19. 19

    带有嵌入式API密钥的静态API文档

  20. 20

    具有动态主机名的Apache ProxyPass

  21. 21

    具有动态子域的 Apache 虚拟主机

  22. 22

    Apache Flink 动态管道

  23. 23

    嵌入式Tomcat 8-错误{org.apache.catalina.core.ContainerBase}-子容器在启动期间失败

  24. 24

    Apache UIMA与Apache Opennlp有何不同

  25. 25

    Apache Apex与Apache Storm有何不同?

  26. 26

    如何在具有嵌入式密钥的Windows 8.1 OEM 64位上安装Windows 10 32位光盘?

  27. 27

    通过CSS修改具有某些HTML属性的嵌入式元素

  28. 28

    带有嵌入式表的动态SQL

  29. 29

    具有嵌入式Jetty的异步Servlet

热门标签

归档