Jsf 2 在JSF+;EJB3.1

Jsf 2 在JSF+;EJB3.1,jsf-2,java-ee-6,ejb-3.1,managed-bean,stateful-session-bean,Jsf 2,Java Ee 6,Ejb 3.1,Managed Bean,Stateful Session Bean,我们的问题是使用JSF+EJB编辑数据库的一个非常基本、简单的实现 言简意赅: 两个单独的XHTML视图,使用两个单独的托管bean@RequestScope WebuserListBean和EditWebuserBean,并使用@ManagedProperty注入WebuserListBean,以便获得选定的用户数据。到目前为止没有问题。视图成功地充满了数据 但是! 我们希望能够编辑用户! 在这里(令我惊讶的是),我们无法克服这个问题 第一次尝试: 因为请求范围的bean在填充视图后已失效,@

我们的问题是使用JSF+EJB编辑数据库的一个非常基本、简单的实现

言简意赅: 两个单独的XHTML视图,使用两个单独的托管bean@RequestScope

WebuserListBean和EditWebuserBean,并使用@ManagedProperty注入WebuserListBean,以便获得选定的用户数据。到目前为止没有问题。视图成功地充满了数据

但是! 我们希望能够编辑用户! 在这里(令我惊讶的是),我们无法克服这个问题

第一次尝试: 因为请求范围的bean在填充视图后已失效,@PostConstruct在Save()方法上尝试再次启动,当然它不能。所以我们甚至无法从数据库或其他任何地方获得它

第二次尝试: 因为请求范围的bean在填充视图后已失效,如果我们不在@postconstruct中将用户设置为字段,我们将失去与在上一个视图上链接的用户对象的连接(并被注入,但现在该视图也失效)

第三次尝试: 无法在ViewScope中插入RequestScope

好的,还有我们的限制,因为我们认为这是错误的:

  • 我们不想为此创建SessionScoped托管Bean
  • 我们不想使用任何参数等。我们想使用EJB
  • 我们不确定是否可以将数据存储在有状态会话bean中,这是我们的目标 模块的端点?这是正确的方法吗
  • 谢谢你的建议,我们可以粘贴一些代码,但我想这是没有意义的!
    干杯

    有很多方法可以做到这一点,但如果导航中涉及的页面位于同一文件夹中,我建议使用flash(我最近在阅读一份答案时发现,flash存在一个已知问题,在不同文件夹中的页面之间导航时,flash不会保存值!)

    flash是一种比单个请求的上下文保存参数的时间稍长的方法(如果我没有弄错的话,概念取自Ruby,如果我弄错了,有人会纠正我),例如,允许在后续视图中获取发送的参数。如果我没有弄错的话,这些值在保存后发出的第二个请求中被丢弃。您可以将闪存注入托管bean,如下所示:

    @ManagedProperty("#{flash}")
    private Flash flash;
    
    public void setFlash(Flash newFlash) {
        flash = newFlash;
    }
    
    然后,使用put和get方法像地图一样访问它。如果在bean中使用put方法,则返回一个重定向规则,并在第二个bean中使用get方法,您的对象应该在那里


    您还可以在JSF中找到一个非常容易理解的通信指南(列出了非常广泛的选项列表),特别是当您需要在不同文件夹中的页面之间导航时。

    “我们不想使用任何参数等。我们想使用EJB”这个论点毫无意义。一个不是另一个的替代品。您的具体问题将通过使用指向编辑页面的幂等GET链接而不是非幂等POST SUBSITY来解决。POST和GET都是在网站上导航的非常简单的方法,尽管我们决定不在URL中显示所选选项,这将提供指向网站的可书签链接。Flash可以完美地工作,因为我们使用两个@ViewScope bean来进行列表和编辑。