【问题标题】:how to distinguish a jsf action or direct url link invoked the page如何区分调用页面的 jsf 动作或直接 url 链接
【发布时间】:2010-10-06 18:32:00
【问题描述】:

我有一个情况,我有一个带有列表的会话 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 .....

【问题讨论】:

    标签: jsf phase


    【解决方案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 操作。

    【讨论】:

    • 嗨,我尝试了请求参数,因为它在门户应用程序中以某种方式被转义,我会进一步调查。我会尝试第一个选项。感谢您的时间和回复:)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 2012-05-23
    • 2012-04-30
    • 2011-06-19
    • 2015-12-29
    相关资源
    最近更新 更多