2012-01-16 16 views
5

mam niestandardową konwertera, aby wybrać kraj w komponencie SelectOneMenu:JSF 2.0 Konwerter nie działa z oddzielnym słoik pliku

Plik: 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; 
}  

I to jest xhtml tekst:

pliku: root Projekt

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

Mam konwerter w pliku "address.jar" i kiedy próbuję otworzyć stronę, aby napisać adres, to odpowiada mówiąc: "Błąd wyrażenia: Obiekt o nazwie MyCustomCoverter nie znaleziony.". Nawet myśl, kiedy kopiuję konwerter do projektu, w którym znajdują się pliki xhtml, wtedy działa dobrze. Co mogę zrobić, żeby to rozwiązać?

Dlaczego to nie działa z oddzielnego pliku jar?

Dzięki.

Odpowiedz

15

Musisz dostarczyć plik JSF 2.0 zgodny z /META-INF/faces-config.xml w pliku JAR, aby JSF automatycznie skanował plik JAR dla klas z adnotacjami 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> 

Bez tego pliku, JSF nie auto-skanowanie pliku JAR do zapisywania wyników i tym samym swoją @FacesConverter nie znajdzie się ani zarejestrowany.

+0

Doskonały, działa bardzo dobrze. Dzięki!. –

+0

Nie ma za co. – BalusC

+1

Jednym dodatkowym, ale ważnym szczegółem jest to, że JAR musi znajdować się w katalogu ** lib WAR (aplikacja webowa). Jeśli masz EAR z WAR, a JAR z konwerterem jest tylko w EAR, ale nie w bibliotece WAR, JSF nie znajdzie konwertera. Zobacz także [tę odpowiedź] (http://stackoverflow.com/questions/2987266/why-doesnt-jsf-2-0-ri-mojarra-scan-my-class-annotations), aby uzyskać inny szczegółowy opis problemu. –

Powiązane problemy