在页面之间保存数据

时间:2017-03-02 05:15:00

标签: jsf jsf-2.2

我一直在阅读应用程序中页面之间的JSF导航,我仍然有点困惑。我有一个小型Web应用程序,其中包含一系列页面,每页都有继续和上一个按钮。为了保存在视图上输入的有效数据,我试图找出在用户前后移动时使有效表单数据保持不变的方法。最初,我在会话范围内有页面浏览量,但我理解这是不好的做法。我捕获的数据可以是一个托管bean,其中bean中的复合对象对应于页面中捕获的数据。但是,我读到会话中的托管bean也不是一个好主意。阅读了这么多帖子后,我觉得我应该知道解决方案但是仍然不清楚如何将经过验证的数据保存到JSF中,以便在用户来回导航时显示?感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

在我看来,你正试图完成某种类似向导的导航。对于这个用例,我建议使用@ConversationScoped后端Bean。

这个范围不是由JSF提供的,而是由完美协同工作的CDI框架提供的。

要实现这一点,您必须遵循以下步骤:

  1. 创建CDI Bean,如:

    @Named   
    @ConversationScoped    
    public class MyBean implements Serializable {    
      @Inject    
      private Conversation conversation;    
      ...
    }
    

    @Named是JSF @ManagedBean的替代CDI 您的类应该实现Serializable接口以便能够钝化其状态 CDI @Inject在您的代码中使用的Conversation-object。

  2. 通过以下方式在代码内的任意位置启动对话:

    conversation.start();
    
  3. 做你的魔术:处理输入,更改数据,导航,持久化到数据库,......

  4. 结束对话(在最后一页的情况下,也许是在点击“完成' -Button”之后)

    conversation.end();
    
  5. 快速谷歌搜索提出了这个漂亮的教程实现一个问答网站,这可能对你有用。看看this

    希望这会有所帮助。玩得开心!

答案 1 :(得分:0)

您是不是将数据保存到数据库中?如果是这样,您可以使用请求范围的托管bean,这样当您导航回原始页面时,将从数据库中重新检索更新的记录,并显示您的更改。