This question already has answers here:
How to inject @EJB, @PersistenceContext, @Inject, @Autowired, etc in @FacesConverter?

(5个答案)


3年前关闭。





我正在尝试为我的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


任何帮助将不胜感激

最佳答案

当您想在转换器中使用托管属性时,请使转换器成为托管Bean,如下所示

@ManagedBean
@SessionScoped
public class DatasetConverter implements Converter{


比在您的xhtml页面中将其用作转换器时,只需使用绑定

像这样

<h:inputText converter="#{datasetConverter}"

关于jsf - 在转换器中注入(inject)ManagedBean ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13101081/

10-13 02:23