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

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

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

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

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

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

有帮助吗?

解决方案

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

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

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

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

如果 postbacktrue, ,然后调用 JSF 操作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top