我有一個包含基於查詢參數(例如,username
和pagenum
)填充的dataTable的頁面。表格中的每個條目都有一個刪除命令按鈕從JSF Datatable上的Request Scope Bean中刪除
當pagenum != 0
和我們單擊刪除時,將在「應用」階段生成要顯示的記錄列表。在這個階段沒有設置視圖參數,所以記錄列表是空的,所以沒有被刪除(我們的刪除方法沒有被調用)
要解決這個問題,我添加了一個@PostConstruct
方法,查詢來自Servlet請求的參數並設置bean中的值,所以當我們獲取離開記錄列表時它們是可用的,這允許我的delete方法被調用。
我確定JSF有更好的方式來處理這種情況,而解決方法是一種破解。
實現此方案的正確方法是什麼,無需訴諸View或Session範圍的bean?
當然,必須有一種方法,只需發佈表單並刪除相應的記錄,而不必浪費時間來重新生成記錄列表。
爲什麼你不想爲你的bean使用'@ ViewScoped'? '@ SessionScoped'不適合這種情況。 –
你可以發佈你的代碼片?正如@LuiggiMendoza所說,最簡單的方法是使用'@ ViewScoped',這將使您能夠維護表的狀態。 –
在這種情況下,它與服務器中的狀態(如'@ ViewScoped' bean)存儲狀態並不矛盾。如果我沒有使用JSF,那麼很容易在每條記錄上實現一個表單,當提交時會調用合適的代碼來刪除記錄,而不必在服務器上維護任何會話狀態。幫助我理解爲什麼使用'@ ViewScoped' bean是一件好事。如果用戶加載頁面,去吃午飯,提交一個刪除表單,但會話已過期,會發生什麼? –