如何区分jsf动作或直接url链接调用页面

时间:2010-10-06 18:32:00

标签: jsf phase

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

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

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

希望我已经说清楚了。简而言之,我必须在我的bean中识别请求是直接来自href,浏览器还是动作。如果搜索操作过滤了数据表的记录,如果没有保留列表缓存并且只要没有搜索就继续显示它。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

如果postbacktrue,则调用JSF操作。