我想使用 JSF 的标准国际化(在属性文件中)以及切换到数据库的可能性。是否可以用从数据库中检索数据的自己的实现替换 JSF 国际化,以便我可以配置它?还是在这种情况下另一种方法更好?我找到了以下示例:http: //jdevelopment.nl/internationalization-jsf-utf8-encoded-properties-files/。在此示例中,定义了自己的资源束类。要使用它,只需替换 xml 中对实现类的引用。
问问题
2392 次
1 回答
3
正如 BalusC 指出的那样,您需要创建一个 ResourceBundle 并将其注册到应用程序或每个页面单独注册。
简单的例子:
索引.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.org/ui">
<h:body>
<h:outputText value="[helloworld]: #{msgs.helloworld}" />
</h:body>
</html>
面孔-config.xml
<?xml version="1.0"?>
<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.myproject.CustomResourceBundle</base-name>
<var>msgs</var>
</resource-bundle>
</application>
</faces-config>
CustomResourceBundle.java
package com.myproject;
import java.util.ListResourceBundle;
public class CustomResourceBundle extends ListResourceBundle {
@Override
protected Object[][] getContents() {
return getMapOfWordsFromDatabase();
}
private Object[][] getMapOfWordsFromDatabase() {
// TODO get key and words relation from database!
return map;
}
}
理论:
http://docs.oracle.com/javaee/5/tutorial/doc/bnaxv.html
http://docs.oracle.com/javase/7/docs/api/java/util/ResourceBundle.html
于 2013-11-27T21:52:00.680 回答