当前位置: 首页 > 面试题库 >

在Wicket中使用参数化UI消息的简单方法?

唐阳晖
2023-03-14
问题内容

Wicket具有灵活的国际化系统,该系统以多种方式支持对UI消息进行参数化。在StringResourceModel
javadocs中有示例,例如:

WeatherStation ws = new WeatherStation();
add(new Label("weatherMessage", new StringResourceModel(
    "weather.${currentStatus}", this, new Model<String>(ws)));

但是我想要一个非常 简单的 东西,而找不到一个很好的例子。

在.properties文件中考虑这种UI消息:

msg=Value is {0}

具体来说,我不想为此目的创建模型对象(使用吸气剂替换要替换的值;如上述示例中的WeatherStation)。如果我已经在局部变量中包含值,那就太过分了,否则就不需要此类对象了。

这是一种用正确的值替换{0}的愚蠢的“蛮力”方法:

String value = ... // contains the dynamic value to use
add(new Label("message", getString("msg").replaceAll("\\{0\\}", value)));

有没有一种干净的,更精巧的方法来做到这一点 (这比上述时间长得多)


问题答案:

我认为最稳定的 WICKETY
方式可以通过改进来完成Jonik的回答有MessageFormat

.properties:

msg=Saving record {0} with value {1}

.java:

add(new Label("label", MessageFormat.format(getString("msg"),obj1,obj2)));
//or
info(MessageFormat.format(getString("msg"),obj1,obj2));

我为什么喜欢它:

  • 干净,简单的解决方案
  • 使用普通的Java,别无其他
  • 您可以根据需要替换任意多个值
  • 使用标签,info(),验证等。
  • 它不是完全wickety,但是与wicket一致,因此您可以使用重复使用这些属性StringResourceModel

笔记:

如果要使用模型,则只需要创建一个简单的模型即可覆盖toString该模型的功能,如下所示:

abstract class MyModel extends AbstractReadOnlyModel{
    @Override
    public String toString()
    {
        if(getObject()==null)return "";
        return getObject().toString();
    }
}

并将其作为MessageFormat参数传递。

我不知道为什么Wicket不支持Model反馈消息。但是如果得到支持,则没有理由使用这些解决方案,您可以StringResourceModel在任何地方使用。



 类似资料:
  • 我已经阅读了一些关于如何自定义处理API请求验证错误的答案和问题。然而,这一切似乎有点过头了。我的endpoint中有一个简单的对象: 发送空值或空值时引发的错误是: 这条信息传递给前端有点太多了。他们需要的只是“目标群体不能是空白的”。我想将上面的信息转换为以下内容: 我怎样才能做到这一点?

  • 主要内容:参数化日志的优势,两个参数变体,多个参数变体正如本教程前面所讨论的,SLF4J提供了对参数化日志消息的支持。可以在消息中使用参数,并在稍后的同一语句中将值传递给它们。 语法 如下所示,需要在消息(String)中的任何位置使用占位符(),稍后可以在对象形式中为占位符传递值,并使用逗号分隔消息和值。 示例 以下示例演示使用SLF4J进行参数化日志记录(使用单个参数)。 执行时,上述程序生成以下输出 - 参数化日志的优势 在Java中,如果需要

  • 我正在使用Spring 3和Thymeleaf制作一些网页,我迷失了如何显示这样的消息: 欢迎message=你好{0},欢迎! 然后用thymeleaf标记内的用户名替换{0}: 我甚至不确定{0}是否是捆绑消息的正确语法。

  • https://cwiki.apache.org/confluence/display/kafka/0.8.0+SimpleConsumer+example 使用SimpleConsumer来使用消息,但是在使用它时,我发现了一些突然的行为,如下所示: 使用者正在使用来自特定分区的消息。但问题是,当我的使用者运行并且我使用生产者将消息推送到主题时,它将使用来自该分区的消息。但是,如果我的消费者目前

  • 我正在使用Spring Boot 2.1.8构建一个项目,我的POM中有spring-boot-starter-web,我可以看到Maven将hibernate-validator 6.0.17拉到类路径上。 我在资源文件夹中有我的消息,它们似乎可以正确地查找,这样当我更改区域设置时,Spring就可以从正确的文件中加载消息。 my@RESTController中的相关方法采用@Valid和@Re

  • 问题内容: 我已经在资源束中存储了一些消息。我正在尝试按以下格式设置这些消息。 假设第一个参数(即实际消息)存储在以某种方式检索到的属性文件中。 第二个参数(即5)是一个动态值,应放置在不会发生的占位符中。下一行打印, 您即将删除{0}行。 占位符不会替换为实际参数。 这里是撇号- 。我试图像往常一样逃避它,尽管它没有用。需要进行哪些更改才能使其正常工作? 问题答案: 向模式添加多余的撇号以确保显