我有一个包含搜索条件和搜索结果的xhtml页面。点击搜索按钮将动态更新同一页面上的结果。我在Page Scope中有一个用于搜索/结果xhtml的控制器。
在搜索结果中的每条记录中都有一个编辑按钮。单击编辑按钮将打开一个新页面(page作用域中的新控制器)。一旦我编辑并保存,我想回到搜索条件页面的搜索结果。
我可以在session和query中存储搜索条件并显示结果。我看了一下对话,我不确定我是否可以在这个场景中使用它?
对于这种情况,除了在会话中转储数据之外,还有什么其他的想法吗?
也将搜索条件传递给编辑视图(但不要显示它们或其他什么),然后让编辑视图在编辑完成后将其传递回搜索视图
如果想在两个页面之间持久化数据,有很多方法:
1)字符串参数2)会话数据3)长时间的谈话4)在其他地方序列化数据(DB或其他)。
既然你在谈论"保存",我可能会认为你是在将数据保存在数据库中。如果您以某种方式将数据保存在第二页,则可以直接查询它们。
否则你可以使用会话和会话,后者有一个"较小的"和定义的范围。你可以决定什么时候创建一个,什么时候创建销毁。只需在第一页pages.xml中添加一个,并创建一个具有对话作用域的bean。
会话作用域将把你的数据保存在你的会话作用域组件中,直到你关闭浏览器。
我将使用会话作用域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时,我错过了这个小细节,并且花了很长时间才弄清楚为什么我们不能在搜索页面中保持下拉选择
如果当你说"打开一个新页面"时,你的意思是在同一个浏览器窗口/选项卡中导航到另一个页面,那么Conversation
是存储搜索状态的理想方法。
根据您的详细用例,您可能更喜欢设置嵌套对话(当您单击编辑时)。
你可能还想设置一个页面流来管理那个特定的导航逻辑。
查看官方文档