我正在尝试为我的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
任何帮助将不胜感激
答案 0 :(得分:4)
如果要在转换器中使用托管属性,请将转换器设置为托管bean,如此
@ManagedBean
@SessionScoped
public class DatasetConverter implements Converter{
比在xhtml页面中使用它作为转换器只需使用绑定
像这样<h:inputText converter="#{datasetConverter}"
答案 1 :(得分:3)
前段时间我遇到过类似的问题,我记得@Inject对转换器不起作用。帮助我的是直接用它的JNDI名称查找bean。这方面的事情:
Context context = new InitialContext();
BeanClass bean = context.lookup("yours bean jndi");
如果你正在使用JBoss,你可以在服务器启动时看到bean JNDI。