2014-03-30 29 views
0

Managed Bean的編輯的對象列表不會在JSF提交

@SuppressWarnings("serial") 
@ManagedBean(name = "samplemanage") 
@RequestScoped 
public class SampleManage implements Serializable 
{ 

    private List<Sample>  samplelist; 

    /** 
    * @return the samplelist 
    */ 
    public List<Sample> getSamplelist() 
    { 
     return samplelist; 
    } 

    /** 
    * @param samplelist the samplelist to set 
    */ 
    public void setSamplelist(List<Sample> samplelist) 
    { 
     this.samplelist = samplelist; 
    } 

    public void docklist(ComponentSystemEvent event) 
    { 
     List<Sample> samplelist = new ArrayList<Sample>(); 
     for(int i = 0 ; i < 10 ; i++) 
     { 
      Sample sa = new Sample(); 
      sa.setName("sample"+i); 
      samplelist.add(sa); 
     } 
     this.samplelist = samplelist; 

     for(Sample sa1 : this.samplelist) 
     System.out.println("inserted name is "+sa1.getName()); 
    } 

    public void checkaction() 
    { 
     for(Sample sa : samplelist) 
     System.out.println("output name is "+sa.getName()); 
    } 

} 

樣例類

public class Sample 
{ 
    private String name; 

    //getter and setter 
} 

XHTML

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:p="http://primefaces.org/ui"> 
<h:head> 
    <f:event listener="#{samplemanage.docklist}" type="preRenderView" /> 
</h:head> 
<h:body> 
    <h:form> 
     <center> 
      <p:dataTable id="sample" var = "sample" value="#{samplemanage.samplelist}"> 

      <p:column headerText="Name"> 
       <h:inputText value="#{sample.name}"></h:inputText> 
      </p:column> 

      </p:dataTable> 
      <p:commandButton id="submit" value="Submit" type="submit" action="#{samplemanage.checkaction}"> 
      </p:commandButton> 
     </center> 
    </h:form> 
</h:body> 
</html> 

輸出

Mar 31, 2014 1:17:13 AM com.sun.faces.lifecycle.InvokeApplicationPhase execute 
WARNING: #{samplemanage.checkaction}: java.lang.NullPointerException 
javax.faces.FacesException: #{samplemanage.checkaction}: java.lang.NullPointerException 

2014年3月31日上午01點17分13秒com.sun.faces.lifecycle.InvokeApplicationPhase執行 警告:#{samplemanage.checkaction}:顯示java.lang.NullPointerException javax.faces。 FacesException:#{} samplemanage.checkaction:顯示java.lang.NullPointerException

我需要從形式得到編輯的值,並打印出來, 我覺得這是很好的方式, 但我不知道爲什麼它的迴歸空指針異常。 我在這裏做錯了什麼

回答

0

您的bean是@RequestScoped,所以每個HTTP請求都會創建一個新的請求。

在創建頁面時,preRenderView事件調用docklist,該事件實例化sampleList屬性並顯示頁面。

當您提交表單時,框架會創建一個新的bean,其中sampleList未被分配一個對象,因此您將獲得NPE。

製作豆子@ViewScoped

+0

很多謝謝SJuan我明白了。 – user3463207