2012-01-16 14 views
5

から働いていないaddress.jarJSF 2.0コンバータは、私がSelectOneMenuコンポーネントで国を選択するには、カスタムコンバータを持って、別の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ファイルでは機能しないのはなぜですか?

ありがとうございました。

答えて

15

JSF 2.0互換の/META-INF/faces-config.xmlファイルをJARファイルに指定すると、JSFがJSFアノテーションを持つクラスのJARファイルを自動スキャンするようになります。

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

さらに重要な点の1つは、JARはWAR(web-application)の** lib-directory **になければならないということです。 WARを持つEARがあり、コンバータを持つJARがEARにのみ存在し、WARのlibにない場合、JSFはコンバータを検出しません。問題の別の詳細な説明については、[この回答](http://stackoverflow.com/questions/2987266/why-doesnt-jsf-2-0-ri-mojarra-scan-my-class-annotations)も参照してください。 –

関連する問題