Инициализация bean-компонента JSF с face-config.xml - PullRequest
0 голосов
/ 15 августа 2011

У меня Bean-компонент с именем Bucket, у него есть HashMap. Я хочу инициализировать bean-компонент и получить HashMap в файлеface-config.xml с файлом свойств. Как я могу это сделать?

Bean:

public class BundleBean {
 private Map<String, String> bundlePropertiesMap = new HashMap<String, String>();
 private String bundleFileName;

 // Setter, getter goes here....
}

Файл свойств, названный bundle.properties, и он находится в пути к классам.

bucket.id=DL_SERVICE

файл лиц-config.xml:

<managed-bean>
    <description>
        Java bean class which have bundle properties.
    </description>
    <managed-bean-name>bundleBean</managed-bean-name>
    <managed-bean-class>org.example.view.bean.BundleBean</managed-bean-class>
    <managed-bean-scope>application</managed-bean-scope>
    <managed-property>
        <property-name>bundleFileName</property-name>
        <value>bundle.properties</value>
    </managed-property>
</managed-bean>

Эта карта должна иметь bucket.id в качестве ключа и DL_SERVICE в качестве значения.

Спасибо за продвинутый ~

Ответы [ 3 ]

2 голосов
/ 15 августа 2011

Предполагая, что файл свойств находится в том же контексте ClassLoader, что и BundleBean, вызовите метод, подобный этому:

@SuppressWarnings("unchecked")
private void loadBundle(String bundleFileName, Map<String, String> map)
                                                         throws IOException {
    InputStream in = BundleBean.class.getResourceAsStream(bundleFileName);
    try {
        Properties props = new Properties();
        props.load(in);
        ((Map) map).putAll(props);
    } finally {
        in.close();
    }
}

Лучше всего использовать аннотацию @PostConstruct. Если это не вариант, вызовите его либо в установщике bundleFileName, либо выполните ленивую проверку в получателе bundlePropertiesMap.

1 голос
/ 15 августа 2011

вы можете сделать это с помощью пружины, которая имеет более продвинутый механизм внедрения зависимостей. когда вы интегрируете spring с jsf, вы можете определить свой пакет jsf в контексте Spring

<bean id="injectCollection" class="CollectionInjection">
        <property name="map">
            <map>
                <entry key="someValue">
                    <value>Hello World!</value>
                </entry>
                <entry key="someBean">
                    <ref local="oracle"/>
                </entry>
            </map>
        </property>
0 голосов
/ 15 августа 2011

Если я не ошибаюсь, JSF вызывает соответствующие установщики при инициализации компонента.Таким образом, предоставление метода public void setBundleFileName(String filename) должно работать.

...