jsf集成spring
作为<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 ApplicationContext 。 var属性是将用于访问消息的变量的名称。
如果您在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.ONE
TWO //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.message和org.springframework.springfaces.message.ui软件包。
参考: Phil Webb博客博客中来自我们JCG合作伙伴 Phillip Webb的Spring和JavaServer Faces集成:国际化和本地化 。
翻译自: https://www.javacodegeeks.com/2012/06/spring-jsf-integration.html
jsf集成spring