2012-01-16 2 views
5

У меня есть пользовательский конвертер, чтобы выбрать страну в компоненте SelectOneMenu:JSF 2.0 Преобразователь не работает с отдельной Jar-файла

Файл: address.jar

@FacesConverter(value="CountryConverter", forClass=Country.class) 
public class CountryConverter implements Converter { 

private CountryBean countryBean = CountryBean.getCountryService(); 

@Override 
public Object getAsObject(FacesContext context, UIComponent component, String value) { 
    return countryBean.find(value); 
} 

@Override 
public String getAsString(FacesContext context, UIComponent component, Object value) { 
    if (value != null) 
     return ((Country)value).getcc_fips(); 
    else 
     return null; 
}  

И это XHTML текст:

Файл: корень Project

<h:selectOneMenu id="country" value="#{cc.attrs.addrEntity.country}"> 
    <f:selectItem itemLabel="Please select one..." 
      noSelectionOption="true" /> 
    <f:selectItems value="#{cc.attrs.addrBean.countries}" 
        var="model" 
        itemLabel="#{model.name}" 
        itemValue="#{model}" 
        noSelectionValue="&#8220;no selection&#8221;"/> 
    <f:converter ConverterId="CountryConverter"/>   
</h:selectOneMenu> 

У меня есть конвертер в файле «address.jar», и когда я пытаюсь открыть страницу для записи адреса, тогда он отвечает: «Ошибка выражения: объект с именем MyCustomCoverter не найден».. Даже когда я копирую конвертер в проект, где находятся файлы xhtml, он работает нормально. Что я могу сделать, чтобы решить эту проблему?

Почему это не работает из разделенного файла jar?

Спасибо.

ответ

15

В JAR-файле должен быть предоставлен файл JSF 2.0 /META-INF/faces-config.xml, чтобы получить JSF для автоматического сканирования файла JAR для классов с аннотациями JSF.

<?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"> 
</faces-config> 

Без этого файла, JSF не будет автоматически сканировать файл JAR, чтобы сохранить производительность и, таким образом, ваш @FacesConverter не будет найдено ни зарегистрировано.

+0

Отлично, он работает очень хорошо. Благодаря!. –

+0

Добро пожаловать. – BalusC

+1

Еще одна важная деталь: JAR должен находиться в ** lib-каталоге ** WAR (веб-приложение). Если у вас есть EAR с WAR в нем, а JAR с конвертером находится только в EAR, но не в lib WAR, JSF не найдет конвертер. См. Также [этот ответ] (http://stackoverflow.com/questions/2987266/why-doesnt-jsf-2-0-ri-mojarra-scan-my-class-annotations) для еще одного подробного описания проблемы. –

Смежные вопросы