在缝中的页面之间维护状态

时间:2011-09-22 03:55:29

标签: jsf seam

我有一个包含搜索条件和搜索结果的xhtml页面。单击搜索按钮将动态更新同一页面上的结果。我在Page Scope中有一个搜索/结果xhtml控制器。

搜索结果中的每条记录都有一个编辑按钮。单击编辑按钮将打开一个新页面(页面范围中的新控制器)。编辑并保存后,我想回到带有搜索结果的搜索条件页面。

我可以在会话中存储搜索条件并重新查询并显示结果。我查看了对话,我不确定我是否可以在这种情况下使用它?

除了在此场景的会话中转储数据之外的任何其他想法吗?

4 个答案:

答案 0 :(得分:1)

将搜索条件也传递到编辑视图(但不显示它们),然后让编辑视图在编辑完成后将其传递回搜索视图。

答案 1 :(得分:0)

如果要在两个页面之间保留数据,可以采用多种方式:

1)字符串参数 2)会话数据 3)长时间运行对话 4)在其他地方(DB或其他)序列化您的数据。

由于您正在谈论“保存”,我可能认为您将数据保存在数据库中。如果您以某种方式将数据保存在第二页中,则只需查询它们即可。

否则您可以使用会话和会话,第二个具有“更小”和定义的范围。您可以决定何时创建一个并创建销毁。只需在第一页pages.xml中创建一个带对话范围的bean。

会话范围将您的数据保留在会话作用域组件中,直到您关闭浏览器。

希望这有帮助。

答案 2 :(得分:0)

我会使用会话范围的bean。如果你使用搜索bean,你可以去你的应用程序的任何地方并保持你的搜索状态,它也有助于在数据库中保存搜索(这样用户可以在会话之间保存搜索)。

@Scope(ScopeType.SESSION)
@Name("someRandomSearch") 
public class SomeRandomSearch {    
    private SearchObj1 userSelection1;
    private List<SearchObj1> searchCriteriaList1;
    private SearchObj2 userSelection2;
    private List<SearchObj2> searchCriteriaList2;
    private String randomUserInput;
    // getters/setters, some helper classes, cascade dropdown stuff, etc.....

    // clear search criteria
    public void reset(){
         this.userSelection1 = null;
         this.userSelection2 = null;
         this.randomUserInput = null;
    }
}

确保在你的模型类中实现equals方法 - 也许这很明显,但是当我第一次开始使用Seam时,我错过了这个小小的花絮,我们花了很长时间才弄清楚为什么我们无法在搜索中保留下拉选项页。

答案 3 :(得分:0)

如果您说&#34;打开新页面&#34;,则表示在同一浏览器窗口/选项卡中导航到另一个页面,然后Conversation是存储搜索状态的理想方法。

根据您的详细用例,您可能更喜欢设置嵌套对话(当您点击编辑时)。

您可能还需要设置页面流来管理特定的导航逻辑。

请参阅the official documentation