2

我正在尝试为我的 selectonemenu 列表编写一个转换器,以便可以从 managedBean 的 getter 中检索我想要显示的列表getDatasetList()。我的 managedBean 是 viewScoped。

这是转换器的代码:

@FacesConverter(value = "datasetConverter")
public class DatasetConverter implements Converter{

@ManagedProperty(value="#{projectCampaignManagementMB}")
private ProjectCampaignManagementMB campaignManagementMB;

@Override
public Object getAsObject(FacesContext context, UIComponent component,
        String value) {

     List <DataSet>  datasetList=campaignManagementMB.getDatasetList();

     DataSet dataSet;
     String dataSetName;
     if (datasetList!=null){
            for(int i=0 ;i<datasetList.size();i++)
            {   
                dataSet=datasetList.get(i);
                dataSetName=dataSet.getName();

            if  (dataSetName.equals(value))
                return dataSet;
            System.out.println("getasobject dataset"+dataSet.getName());
            }
     }
            return null;
}

@Override
public String getAsString(FacesContext context, UIComponent component,
        Object value) {

 if (value==null) return ""; 
    System.out.println("getastring dataset"+((DataSet) value).getName());
 return ((DataSet) value).getName();
}

但是我在这条线上得到了一个 java.lang.NullPointerException

  List <DataSet>  datasetList=campaignManagementMB.getDatasetList();

所以注入的managedBean为Null,

我尝试了一些没有意义但有效的东西,但我想要一些正确的东西。我用这个

@ManagedProperty(value="#{projectCampaignManagementMB}")
private ProjectCampaignManagementMB campaignManagementMB =
    new ProjectCampaignManagementMB();

代替

@ManagedProperty(value="#{projectCampaignManagementMB}")
private ProjectCampaignManagementMB campaignManagementMB

任何帮助将不胜感激

4

2 回答 2

4

当您想在转换器中使用托管属性时,请让您的转换器成为托管 bean,就像这样

@ManagedBean
@SessionScoped
public class DatasetConverter implements Converter{

比在您的 xhtml 页面中使用它作为转换器只需使用绑定

像这样

<h:inputText converter="#{datasetConverter}"
于 2012-10-27T18:32:57.813 回答
3

前段时间我遇到了类似的问题,我记得@Inject 不适用于转换器。帮助我的是直接用它的 JNDI 名称查找 bean。沿着这条线的东西:

Context context = new InitialContext();  
BeanClass bean = context.lookup("yours bean jndi");

如果您使用 JBoss,您可以在服务器启动时看到 bean JNDI。

于 2012-10-27T17:30:29.910 回答