2010-10-06 63 views
0

我有一个情况,我有一个会话bean与列表,这个列表我显示在html数据表中。当用户从浏览器或正常的href点击网址时,我必须显示所有记录。还有规定可以搜索数据,也可以在那里显示过滤列表。现在用户搜索完成后,列表中包含已过滤的记录,并在完成此操作后将页面留给其他用户,现在,如果用户点击了网址或使用菜单返回此页面,因为我拥有此列表在会话bean中,我仍然有过滤列表。如何区分jsf动作或直接url链接调用页面

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

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

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

只是指导我是否以正确的方式做事,或者思考得太多,还是可以以更有效的方式完成。

在此先感谢。 井平台是jsf 1.1在weblogic portal 10.3 .....

回答

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动作。

+0

嗨,我试过请求params,因为它在门户应用程序它以某种方式得到逃脱,我会进一步探讨。我会先试一试。感谢您的时间和回应:)。 – 2010-10-07 04:27:54