當我回到同一屏幕時,Bean值不會被刪除。重新訪問視圖時清除會話作用域bean的數據
- 我創建用戶的詳細信息,並插入數據
- 我認爲所有列出的用戶在數據庫中可用
- 我搜索特定用戶
- 我回來的時候創建的用戶頁面上,我看到的數據搜索用戶
如何從bean中刪除舊數據?受管理的bean在會話範圍內。
當我回到同一屏幕時,Bean值不會被刪除。重新訪問視圖時清除會話作用域bean的數據
如何從bean中刪除舊數據?受管理的bean在會話範圍內。
你需要一個很好的理由,爲什麼你會希望把用戶的列表到會話作用域bean。這可能會導致一些麻煩,並最終在多用戶環境中反映過時的數據。取而代之的是使用豆@ViewScoped
,並將所有用戶或用戶子集加載到@PostConstruct
方法中。
至於一致性當使用會話範圍的豆,我的猜測是,你沒有更新當前用戶的列表。基本上你需要在這種情況下加倍操作:第一個操作是數據庫操作,第二個操作是列表更新操作。就像下面的代碼:
public void deleteUser() {
yourEJB.remove(user);
listOfUsers.remove(user);
}
此外,有你的UI更新,務必使回傳,由操作方法返回void
/null
,或通過AJAX更新所需的組件,通過指定客戶端ID爲render
屬性的<f:ajax>
標記。
我想你在考慮@Remove註解,這應該是在特定的方法(或者我明白你的問題是錯誤的)。
參考:http://docs.oracle.com/javaee/5/api/javax/ejb/Remove.html
這裏有幾件事情:首先,發佈一個簡單的例子:它允許我們運行它來幫助你。但是,這可能是(可能)發生的。您的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一旦掌握了它就可以繼續工作。
你的bean的範圍是什麼?你在談論JSF中的EJB或ManagedBean嗎?一個小的代碼示例將清楚地解釋這一點。這絕對是一個範圍問題。 – 2013-05-03 15:13:13
@DanielChapman我更新了帖子,請檢查 – developer 2013-05-03 15:22:09