【问题标题】:Clear data of a session scoped bean when the view is revisited重新访问视图时清除会话范围 bean 的数据
【发布时间】:2013-04-28 00:57:59
【问题描述】:

当我返回同一屏幕时,Bean 值不会被删除。

  1. 我创建用户详细信息并插入数据
  2. 我查看了数据库中列出的所有可用用户
  3. 我搜索特定用户
  4. 当我返回创建用户页面时,我看到了搜索用户的数据

如何从 bean 中删除旧数据?托管 bean 在会话范围内。

【问题讨论】:

  • 你的bean的作用域是什么?您是在谈论 JSF 中的 EJB 或 ManagedBean 吗?一个小的代码示例可以清楚地解释这一点。这绝对是范围问题。
  • @DanielChapman 我更新了帖子,请检查

标签: java jsf session


【解决方案1】:

您需要有充分的理由将用户列表放入会话范围的 bean 中。它可能会引起一些麻烦,并最终反映多用户环境中的过时数据。改为使用 bean @ViewScoped,并在 @PostConstruct 方法中加载所有用户或用户子集。

至于在使用会话范围 bean 时的一致性,我的猜测是您没有更新当前用户列表。在这种情况下,基本上你需要加倍操作:第一个操作是数据库操作,第二个操作是列表更新操作。就像下面的代码:

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

此外,要更新您的 UI,请务必通过从操作方法返回 void/null 进行回发,或者通过 AJAX 更新所需的组件,方法是在 render 属性中指定其客户端 ID <f:ajax> 标签。

【讨论】:

    【解决方案2】:

    我认为您正在考虑 @Remove 注释,它应该在特定方法上(或者我理解您的问题是错误的)。

    参考:http://docs.oracle.com/javaee/5/api/javax/ejb/Remove.html

    【讨论】:

      【解决方案3】:

      这里有几件事:首先,发布一个简单的示例:它允许我们运行它来帮助您。但这就是(可能)正在发生的事情。您的 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 的窍门,与 JSF 一起工作会很有益。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-23
        • 2012-05-26
        • 2012-01-20
        • 2012-08-28
        • 1970-01-01
        • 2012-12-26
        • 1970-01-01
        • 2012-03-16
        相关资源
        最近更新 更多