2

表示したいリストを managedBean の getter から取得できるように、selectonemenu リストのコンバーターを作成しようとしています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 に答える