3

我想使用 JSF 的标准国际化(在属性文件中)以及切换到数据库的可能性。是否可以用从数据库中检索数据的自己的实现替换 JSF 国际化,以便我可以配置它?还是在这种情况下另一种方法更好?我找到了以下示例:http: //jdevelopment.nl/internationalization-jsf-utf8-encoded-properties-files/。在此示例中,定义了自己的资源束类。要使用它,只需替换 xml 中对实现类的引用。

4

1 回答 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 回答