【问题标题】:JSF: call backing-bean method without rendering the page (using URL parameters)JSF:调用 backing-bean 方法而不渲染页面(使用 URL 参数)
【发布时间】:2012-11-11 21:52:08
【问题描述】:

是否可以按以下方式使用 JSF (PrimeFaces) 页面? :

  1. 外部应用程序(不基于 JSF)使用 URL 参数执行 HTTP GET
  2. JSF 页面读取这些参数(例如,如 here 所述)并调用支持 bean 业务方法,而不向用户浏览器呈现任何内容
  3. 用户被透明地发送到与步骤 2 中调用的支持 bean 方法的导航结果相对应的页面。

也就是说,步骤2PrimeFaces页面只涉及调用backing-bean业务方法的副作用,从不显示。用户点击步骤1的外部应用程序上的链接后,会进入步骤3的页面。

【问题讨论】:

  • 也许你可以定义一个preRenderView。除此之外,我看到的选择很少。

标签: jsf primefaces


【解决方案1】:

使用<f:viewParam> 将GET 参数设置为bean 属性并使用<f:event> 执行bean 操作并使用NavigationHandler 以编程方式执行导航。

查看:

<f:metadata>
    <f:viewParam name="foo" value="#{bean.foo}" />
    <f:viewParam name="bar" value="#{bean.bar}" />
    <f:event type="preRenderView" listener="#{bean.action}" />
</f:metadata>

豆子:

public void action() {
    // ...

    FacesContext context = FacesContext.getCurrentInstance();
    NavigationHandler navigationHandler = context.getApplication().getNavigationHandler();
    navigationHandler.handleNavigation(context, null, "outcome");
}

请注意,根据具体的功能需求,JSF 可能不一定是适合这项工作的工具。我会调查您是否不能更好地使用servlet filter 甚至是普通的servlet

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-30
    • 2012-01-27
    • 2012-12-28
    • 2011-11-06
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    相关资源
    最近更新 更多