2013-04-11 90 views
0

我正在創建一個只有一個JSP頁面(1個下拉列表,1個數據表提交按鈕)的簡單JSF應用程序。JSF Datatable Binding無法正常工作

當我從下拉列表中選擇值時,我使用arraylist填充表格以顯示錶格數據。該表是可編輯的。現在當我點擊提交時,我需要將整個表格放入列表中。爲此,我使用了datatable的binding屬性。但問題是null從getValue返回。

請幫我解決這個問題,因爲我浪費了很多時間。

class UserBean { 

..... 
private HtmlDataTable _dataTable; 

    public void setDataTable(HtmlDataTable dataTable) 
    { 
    this._dataTable = dataTable; 
    } 

    public HtmlDataTable getDataTable() 
    { 
    return _dataTable; 
    } 

................... 


public String submit() { 
    List<User> userDetails = (ArrayList<User>)((HtmlDataTable)getDataTable()).getValue(); 
    System.out.println(userDetails); 
    return ""; 
} 

} 

// JSP頁面

<h:dataTable id="erdatatable" 
        var="row" value="#{UserBean.userDetails}" 
        binding="#{UserBean.dataTable}"> 

.... 
</h:dataTable> 

<h:commandButton value="Submit" action="#{UserBean.submit}"></h:commandButton> 

// faces.config

<managed-bean> 
     <managed-bean-name>UserBean</managed-bean-name> 
     <managed-bean-class>com.datatable.UserBean</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 

// web.xml中

<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>/faces/*</url-pattern> 
    </servlet-mapping> 

回答

0

你可以嘗試改變託管bean-範圍到會話。當調用操作(下拉選擇)並填充數據表時,UserBean類的請求範圍結束。當你再次按下提交按鈕時,會創建一個新的UserBean實例。

+0

非常感謝...它得到解決..謝謝非常多:) – Soheb 2013-04-11 08:30:44

0
  1. 如果您只需要表中的數據,則根本不需要(也可能不應該)綁定它。您的userDetails將包含由用戶編輯的所有數據,無需額外工作。

  2. 如果您使用會話範圍,只要有人在兩個選項卡中打開您的應用程序,從其中一個選項卡中的下拉列表中選擇某些內容,然後按下第二個按鈕上的按鈕,就會出現錯誤。一個常見的解決方案是使用視圖範圍(這不適用於綁定,但 - 正如我所說 - 你不應該使用它)

+0

嗨, 根據你的觀點2我面臨的問題,你告訴。 我正在使用JSF 1.2是否有任何其他解決方案可以解決此問題。 – Soheb 2013-04-13 02:51:12