2013-05-03 61 views
1

當我回到同一屏幕時,Bean值不會被刪除。重新訪問視圖時清除會話作用域bean的數據

  1. 我創建用戶的詳細信息,並插入數據
  2. 我認爲所有列出的用戶在數據庫中可用
  3. 我搜索特定用戶
  4. 我回來的時候創建的用戶頁面上,我看到的數據搜索用戶

如何從bean中刪除舊數據?受管理的bean在會話範圍內。

+1

你的bean的範圍是什麼?你在談論JSF中的EJB或ManagedBean嗎?一個小的代碼示例將清楚地解釋這一點。這絕對是一個範圍問題。 – 2013-05-03 15:13:13

+0

@DanielChapman我更新了帖子,請檢查 – developer 2013-05-03 15:22:09

回答

2

你需要一個很好的理由,爲什麼你會希望把用戶的列表到會話作用域bean。這可能會導致一些麻煩,並最終在多用戶環境中反映過時的數據。取而代之的是使用豆@ViewScoped,並將所有用戶或用戶子集加載到@PostConstruct方法中。

至於一致性當使用會話範圍的豆,我的猜測是,你沒有更新當前用戶的列表。基本上你需要在這種情況下加倍操作:第一個操作是數據庫操作,第二個操作是列表更新操作。就像下面的代碼:

public void deleteUser() { 
    yourEJB.remove(user); 
    listOfUsers.remove(user); 
} 

此外,有你的UI更新,務必使回傳,由操作方法返回void/null,或通過AJAX更新所需的組件,通過指定客戶端ID爲render屬性的<f:ajax>標記。

0

這裏有幾件事情:首先,發佈一個簡單的例子:它允許我們運行它來幫助你。但是,這可能是(可能)發生的。您的bean是會話作用域,這意味着它將在用戶進行會話的整個時間內都存在。除非你明確地銷燬會話,否則請改變它爲那個會話「存在」的值。

使用JSF2註釋試試這個:

@ManagedBean(name="seesionScopedBean") 
@SessionScoped 
public class SessionScopedBean { private String data;//create getter/setter} 

@ManagedBean(name="viewScopedBean") 
@ViewScoped 
public class ViewScopedBean { private String data;} 

@ManagedBean(name="requestScopedBean") 
@RequestScoped 
public class RequestScopedBean { private String data;} 

假設你的三個範圍做一個網頁,基本上是

<f:view> 
<h:form> 
<h:inputText value="#{sessionScopedBean.data}" /> 
<h:inputText value="#{viewScopedBean.data}" /> 
<h:inputText value="#{requestScopedBean.data}" /> 
<!-- whatever listener/action to set things --> 
</h::form> 
</f:view> 

你會發現,「SessionScoped」數據保持,直到你註銷,只要你和這個視圖交互,視圖就會保留下來(不完全正確,但這就是它的要點,而且請求範圍在每個請求中都存在)

基本上你創建用戶bean感覺它應該有一個請求或查看範圍(如前面的答案中所述)。希望這有助於。整個生命週期需要花費一些時間,但JSF一旦掌握了它就可以繼續工作。