Конвертер JSF 2.0 не работает из отдельного jar-файла - PullRequest
5 голосов
/ 17 января 2012

У меня есть специальный конвертер для выбора страны в компоненте SelectOneMenu:

Файл: 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:

Файл: Корень проекта

  <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?

Спасибо.

1 Ответ

16 голосов
/ 17 января 2012

Вы должны предоставить совместимый с JSF 2.0 файл /META-INF/faces-config.xml в файле JAR, чтобы 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 не будет найден и не зарегистрирован.

...