在本教程中,我们演示了使用资源包在JSF 2.0中显示消息。 出于可维护性的考虑,始终建议将所有消息放在属性文件中,而不是直接在页面中对消息进行硬编码。
1.属性文件
创建一个属性文件,包含该页面的消息,并将其放入项目的资源文件夹中,请参见下图
messages.properties
message = This is "message"
message.test1 = This is "message.test1"
message.test2 = This is "<h2>message.test3</h2>"
message.test3 = This is "<h2>message.test4</h2>"
message.param1 = This is "message.param1" - {0}
message.param2 = This is "message.param2" - {0} and {1}
项目文件夹结构。
2.使用资源包
有两种方法可以将属性文件加载到JSF 2.0中。
1.全球资源包
全局加载属性文件,以便所有jsf页面都可以访问消息。 您可以创建一个“ faces-config.xml ”文件并显式声明属性文件。
faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
<application>
<resource-bundle>
<base-name>com.mkyong.messages</base-name>
<var>msg</var>
</resource-bundle>
</application>
</faces-config>
2.本地资源包
在本地或仅用于指定页面加载属性文件。 在需要访问messages.properties中的消息的页面中声明<f:loadBundle />标记。
<f:loadBundle basename="com.mkyong.messages" var="msg"/>
3. JSF 2.0页面
在这种情况下, messages.properties文件的名称为“ msg ”,只需使用“ msg.key ”即可访问该消息。
hello.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:body>
<h2>JSF 2.0 and Resource Bundles Examples</h2>
<ol>
<li><h:outputText value="#{msg.message}" /></li>
<li><h:outputText value="#{msg['message.test1']}" /></li>
<li><h:outputText value="#{msg['message.test2']}" /></li>
<li><h:outputText value="#{msg['message.test2']}" escape="false" /></li>
<li><h:outputText value="#{msg['message.test3']}" /></li>
<li><h:outputText value="#{msg['message.test3']}" escape="false" /></li>
<li>
<h:outputFormat value="#{msg['message.param1']}">
<f:param value="param0" />
</h:outputFormat>
</li>
<li>
<h:outputFormat value="#{msg['message.param2']}">
<f:param value="param0" />
<f:param value="param1" />
</h:outputFormat>
</li>
</ol>
</h:body>
</html>
4.如何运作?
例子1
访问消息的一种正常方法。
<h:outputText value="#{msg.message}" />
//properties file
message = This is "message"
例子2
对于带有点“。”的键 作为名称,您不能使用正常的方式#{msg.message.test1} ,它将无法正常工作。 相反,您应该使用#{msg ['message.test1']}之类的括号。
<h:outputText value="#{msg['message.test1']}" />
//properties file
message.test1 = This is "message.test1"
例子3
要在消息中显示HTML标签,只需添加“ escape ”属性并将其设置为false。
<h:outputText value="#{msg['message.test2']}" />
<h:outputText value="#{msg['message.test2']}" escape="false" />
<h:outputText value="#{msg['message.test3']}" />
<h:outputText value="#{msg['message.test3']}" escape="false" />
//properties file
message.test2 = This is "<h2>message.test3</h2>"
message.test3 = This is "<h2>message.test4</h2>"
例子4
对于参数消息,只需使用<h:outputFormat />和<f:param />标记。
<h:outputFormat value="#{msg['message.param1']}">
<f:param value="param0" />
</h:outputFormat>
<h:outputFormat value="#{msg['message.param2']}">
<f:param value="param0" />
<f:param value="param1" />
</h:outputFormat>
//properties file
message.param1 = This is "message.param1" - {0}
message.param2 = This is "message.param2" - {0} and {1}
5.演示
网址: http:// localhost:8080 / JavaServerFaces / hello.jsf
下载源代码
下载它– JSF-2-Resource-Bundles-Example.zip (8KB)
翻译自: https://mkyong.com/jsf2/jsf-2-0-and-resource-bundles-example/