当我回到同一屏幕时,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