2012-01-05 57 views
1

我有一个简单的问题,当我调用一个托管bean方法返回一个列表时,为什么总是得到一个NPE。我在我看来使用了primefaces向导组件。例如可以sometone告诉我,这两者之间的区别:调用托管bean方法返回一个NPE

不起作用:

public List<RequiredParam> getRequiredFields() { 
    if(!this.sdeCommand.getActions().isEmpty() &&this.action!=null &&!this.action.equals("")){ 
     for(CommandAction act:this.sdeCommand.getCommandActions()){ 
      if(act.getActionName().equalsIgnoreCase(this.action)){ 
       this.requiredFields.addAll(act.getFields()); 
      } 
     } 
    } 
    return this.requiredFields; 
} 

但是这个工程:

public List<RequiredParam> getRequiredFields() { 

    return this.requiredFields; 
} 

的观点:

       <c:forEach items="${gdsiGeodataBean.requiredFields}" var="reqs"> 
            <h:outputLabel for="#{reqs.name}" value="#{reqs.name}:* " /> 
           </c:forEach> 

错误信息:

java.lang.NullPointerException 
    com.tsystems.appbeans.GdsiGeodataBean.getRequiredFields(GdsiGeodataBean.java:103) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    java.lang.reflect.Method.invoke(Method.java:597) 
    javax.el.BeanELResolver.getValue(BeanELResolver.java:62) 
    com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) 
    com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) 
    org.apache.el.parser.AstValue.getValue(AstValue.java:118) 
... 

我的观点:

+0

显然,你的一些bean的属性是'null'。仔细检查你是否已经正确实例化了所有的'List'属性 – 2012-01-05 11:38:14

+0

@ Mr.J4mes,谢谢其中的一个属性为null。我正在使用一个向导,并且已经在前一个选项卡中设置了该属性。不知何故该物业失去了价值。 – algone 2012-01-05 17:15:24

回答

1
this.sdeCommand.getActions().isEmpty() 

以上将抛出NPE如果getActions()返回null。首先检查以确保getActions() != null。这可能是也可能不是你的问题,但它肯定是不安全的代码,它不应该通过正式的代码审查。

+0

谢谢你指出。我认为这是问题所在。我确定该方法返回一个列表,但我应该检查。现在工作正常!然而,我有另一个相关的问题,在同一个bean中,我有一个带有getter和setter的简单字符串属性。吸气剂工作正常,但不是装置工。在setter方法中,我为每个传入参数构建一个Stringbuffer。那是错的吗?我已经在setter中进行了测试,看看是否传入了输入字符串,但显然该方法根本没有被调用/调用。在视图中使用#{}表示法。 – algone 2012-01-05 17:12:30

+0

@algone请使用相关代码更新您的代码。 – 2012-01-05 17:45:26

+0

@algone如果没有看到代码,很难说出问题所在。请把它作为一个单独的问题发布,我们可以尝试帮助你。 – 2012-01-05 17:46:55

相关问题