0

我有一个情况,我有一个带有列表的会话 bean,这个列表显示在 html 数据表中。当用户从浏览器或普通 href 中点击 url 时,我必须显示所有记录。还可以搜索数据,我必须在其中显示过滤后的列表。现在,在用户进行搜索后,列表包含过滤记录,然后他将页面留给其他人,现在如果用户点击 url 或使用菜单返回此页面,因为我有这个列表在会话 bean 中,我仍然有过滤列表。

由于 JSF 1.1 或 2.0 preRenderView 概念中没有默认操作,因此很难清除列表并再次获取未过滤的数据(所有结果)。甚至 getList() 方法中的技巧也无法完成任务。

我计划使用阶段侦听器,因为当用户通过浏览器中的 href 或 url 访问页面时,调用应用程序阶段不会发生。我可以在我的会话 bean 和 getList() 中切换布尔变量,我可以执行一些技巧来检查它是 url、href 命中还是命令按钮。

希望我已经说清楚了。简而言之,我必须在我的 bean 中确定请求是直接来自 href、浏览器还是操作。如果搜索操作过滤数据表的记录,如果不保留列表缓存,只要不进行搜索就一直显示它。

请指导我是否以正确的方式做事或想太多,或者是否可以以更有效的方式完成。

提前致谢。Well 平台是 weblogic 门户 10.3 中的 jsf 1.1 .....

4

1 回答 1

1

JSF 1.x 操作默认使用POST方法。直接链接/书签/等是自然GET方法。由于 JSF 1.1 中没有ResponseStateManager#isPostback()or FacesContext#isPostback(),因此您必须自己确定请求方法:

HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
boolean postback = "POST".equalsIgnoreCase(request.getMethod());

或者检查请求参数映射中的某个参数,但我无法从头顶告诉您要检查哪个参数。你必须自己确定。

boolean postback = facesContext.getExternalContext().getRequestParameterMap().containsKey(SOME_KEY);

如果postbacktrue,则调用 JSF 操作。

于 2010-10-06T19:28:34.527 回答