如果您正在开发针对多种语言的JSF应用程序,那么您可能很熟悉<f:loadBundle>标记。 即使您的应用程序不支持使用消息包的国际化仍然是一个好主意。 在<f:loadBundle>标记下,它从Java java.util.ResourceBundle中读取消息,尽管这可以工作,但Spring开发人员通常更喜欢org.springframework.context.MessageSource接口。

作为<f:loadBundle>的替代方案,我一直在开发一个新的<s:messageSource>组件,该组件可用于公开来自任何Spring MessageSource的消息,并提供其他一些优点。

新组件是<f:loadBundle>的直接替代。

<s:messageSource source="#{messageSource}" var="messages"/>
<p><h:outputText value="#{messages.hello}"/>
</p>

source属性可以是任何解析为MessageSource实例的EL表达式。 如果未指定源,则将使用Spring ApplicationContextvar属性是将用于访问消息的变量的名称。

与标准JSF不同,要加载的消息的密钥将根据要呈现的页面的ID构建。 例如,假设上面的页面来自文件WEB-INF / pages / messages / simple.xhtml ,则用于加载问候消息的键将为pages.messages.simple.hello 。 使用这些复合键可以防止消息键冲突,并使页面标记清晰美观。 如果需要,可以使用prefix属性覆盖此行为。

如果您在XHTML中引用了忘记定义的消息,则将看到警告消息(在开发中),或者将引发异常(在生产中)。

与标准JSF一样,您的消息并包含与<h:outputFormat>一起使用的占位符

pages.message.simple.welcome=Welcome to {1} with {0}
<h:outputFormat value="#{messages.welcome}"><f:param value="Spring"/><f:param value="JSF"/>
</h:outputFormat>

<h:outputFormat>标签有点冗长,因此为了方便起见,Spring消息可以用作Map 。 这使您可以更简洁地引用占位符:

<h:outputText value="#{messages.welcome['Spring']['JSF']}"/>

相同的语法允许您将Java对象映射到消息。 默认情况下,对象是通过从类名称构建消息键来映射的。 例如,以下类:

package org.example;
public class ExampleObject {
}

可以在JSF中引用:

<h:outputText value="#{messages[exampleInstance]}"/>

解决以下消息:

org.example.ExampleObject=example

对于枚举对象,消息键包括枚举名称和类:

package org.example;
public enum ExampleObject {ONE, //mapped to message key org.example.ExampleObject.ONETWO  //mapped to message key org.example.ExampleObject.TWO
}

对象消息还可以引用应构成消息一部分的属性:

org.example.PersonName=Name is {first} {last}
...package org.example;
public class PersonName {...public String getFirst() {...}public String getLast() {...}
}

您还可以通过使用实现org.springframework.springfaces.message.ObjectMessageSource接口的消息源来定义自己的对象消息策略。

如果要检查其中的任何代码,请查看GitHub Project中的org.springframework.springfaces.messageorg.springframework.springfaces.message.ui软件包。

参考: Phil Webb博客博客中来自我们JCG合作伙伴 Phillip Webb的Spring和JavaServer Faces集成:国际化和本地化 。

翻译自: https://www.javacodegeeks.com/2012/06/spring-jsf-integration.html

Spring和JSF集成:国际化和本地化相关推荐

  1. Spring和JSF集成:转换器

    使用任何Web框架时,都不可避免地需要将用户输入的数据从String为其他类型. 尽管Spring和JSF在设计和功能上确实有很大的不同,但它们都具有转换器策略来处理此问题. 让我们从春天开始. Sp ...

  2. Spring和JSF集成:MVC螺母和螺栓

    过去,我曾尝试将JSF与Spring MVC集成在一起,尽管我的第一次尝试成功了,但这远非理想. 这次,我决定做出一些关键决定来帮助我集中精力: 向后兼容. 支持JSF 1.2涉及的工作太多,而Spr ...

  3. Spring和JSF集成:选择项目

    使用JSF,要使用组合框,列表框和复选框,您需要了解javax.faces.model.SelectItem类. SelectItem表示单个可选选项. 它既包含渲染所需的信息,又包含选择该项目时应绑 ...

  4. Spring和JSF集成:异常处理

    大多数JSF开发人员都会熟悉"发生错误"页面,当在他们的代码某处引发意外异常时,该页面就会显示. 该页面在开发时确实很有用,但对于生产应用程序通常不是您想要的. 通常,在用库存JS ...

  5. Spring和JSF集成:分页

    处理大型数据集时,通常需要以分页格式显示数据. 分页是一个有趣的问题,因为它倾向于跨越应用程序的所有层,从视图层通过应用程序服务一直到对数据库的原始调用. 在获取分页数据时,有一些非常好的解决方案. ...

  6. Spring和JSF集成:动态导航

    通常,您的JSF应用程序将需要超越基本的静态导航并开始做出动态导航决策. 例如,您可能想根据用户的年龄重定向他们. 大多数JSF教程建议通过将命令的action属性绑定到支持bean来实现动态导航: ...

  7. Spring和JSF集成:导航

    我希望这是有关我在Spring和JavaServer Faces之间提供深度集成的努力的一系列博客中的第一篇. 这里提到的所有内容都是"正在进行中的工作",因此,如果您签出代码,请 ...

  8. spring本地化默认英文_Spring3国际化和本地化

    spring本地化默认英文 我最近想将Spring 3提供的国际化和本地化功能添加到我当前的项目之一中. 我浏览了Spring文档,然后在Internet上搜索以找到一些资源. 但是我找不到能够满足客 ...

  9. Spring3国际化和本地化

    我最近想将Spring 3提供的国际化和本地化功能添加到我当前的项目之一中. 我浏览了Spring文档,然后在Internet上搜索以找到一些资源. 但是我找不到能够满足客户要求的资源. 大多数教程都 ...

最新文章

  1. php实现上传文件功能,简单实现php上传文件功能
  2. 简易有WEB文件服务器,Python实现简易版的Web服务器(推荐).pdf
  3. 软件测试学习之 ---------- MySQL的查询(重中之重)
  4. 多线程-使线程具有有序性
  5. SPS技术体系之一-----程序文件和IIS配置
  6. oracledatabase11gr2怎么打开_oracle database 11gR2 + forms and reports 11g安装教程
  7. C字符串与C++字符串基本用法
  8. HTML中       等6种空白空格的区别
  9. 【1】JVM-内存模型
  10. 向全国推荐优秀古籍整理图书活动入选书目公示(zz)
  11. JS计算时间差;.net计算时间差
  12. 1483选票统计(一)(结构体专题)
  13. jasper报表格式化bigdecimal(decimal128)数据千分位
  14. 北京英语计算机统考,北京市2019年高考英语听力机考问答
  15. 算法系列之十九:用天文方法计算日月合朔(新月)
  16. 细粒度图像分类(FGVC)---综述
  17. 中国期货市场死亡警示录
  18. 饥荒联机云服务器_饥荒联机云服务器开档
  19. 发表 SCI 封面文章是一种怎样的体验?
  20. 在服务器上一按l键自动退出,利用 SysRq 键排除和诊断系统故障

热门文章

  1. Java IO(BIO, NIO, AIO) 总结
  2. java oca_OCA第6部分中的Java难题
  3. 只读事务上下文_我可以/应该在事务上下文中使用并行流吗?
  4. java 线程安全性_我如何测试Java类的线程安全性
  5. jdk只有一个java进程_JDK 10:从Java访问Java应用程序的进程ID
  6. mybatis缓存二级缓存_MyBatis缓存与Apache Ignite的陷阱
  7. junit测试线程_一个在自己的线程中运行测试的JUnit规则
  8. Java 8过滤器,地图,收集和流示例
  9. Java的最新发展– 2018年4月下旬
  10. JWT令牌的秘密轮换