Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSF2.0转换器无法从单独的jar文件工作_Java_Jsf 2_Converter - Fatal编程技术网

Java JSF2.0转换器无法从单独的jar文件工作

Java JSF2.0转换器无法从单独的jar文件工作,java,jsf-2,converter,Java,Jsf 2,Converter,我有一个自定义转换器,可以在SelectOneMenu组件中选择国家/地区: 文件:address.jar @FacesConverter(value="CountryConverter", forClass=Country.class) public class CountryConverter implements Converter { private CountryBean countryBean = CountryBean.getCountryService(); @Overrid

我有一个自定义转换器,可以在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文件中工作


谢谢。

您必须在JAR文件中提供一个与JSF 2.0兼容的
/META-INF/faces config.xml
文件,以便让JSF自动扫描JAR文件以查找带有JSF注释的类



没有该文件,JSF将不会自动扫描JAR文件以节省性能,因此您的
@FacesConverter
将无法找到或注册。

另一个重要细节是,JAR必须位于WAR(web应用程序)的lib目录中。如果您有一个带有WAR的EAR,并且带有转换器的JAR只在EAR中,而不在WAR的库中,那么JSF将找不到转换器。有关此问题的另一详细说明,请参见。@Martin:EAR/lib从来都不适用于特定于战争的库。JavaEE规范和JavaEE教程都没有提到这一点。不管怎样,任何把战争专用库放在耳朵里的人都是大错特错。这与战争特定的库是否包含JSF特定工件无关。@ BaluSc:考虑瘦战。如果我对两场战争都需要相同的转换器有一只耳朵会怎么样。我是否必须为JAR提供两个WAR的转换器类?它们不应该是通过EAR共享的一个罐子向战争提供转换器的一种方式吗?@Martin:只需给每一场战争一个罐子。战争不应该依赖耳朵。或者,在JavaEE容器中将JAR注册为WAR共享模块。为每一场战争提供自己的JAR是可行的,但这是一种非常浪费资源的方法。“战争共享模块”的想法听起来不错。你能提供一些链接/信息吗?我应该开始一个新问题吗?