【问题标题】:Primefaces additional attribute with ajax eventPrimefaces 带有 ajax 事件的附加属性
【发布时间】:2013-02-18 19:28:37
【问题描述】:

我有这个 tabview 组件:

<p:tabView id="tabView"
        var="tab"
        dynamic="true"
        cache="true"
        value="#{integrationBean.tabs}">

        <p:ajax event="tabChange"
            listener="#{integrationBean.tabChanged}"
            update="tabContent"/>

我需要将属性传递给 ajax 请求。 像

<p:ajax event="tabChange"
                listener="#{integrationBean.tabChanged}"
                update="tabContent">
<f:param name="id" value="#{integrationBean.id}" />
<!-- OR -->
<f:attribute name="id" value="#{integrationBean.id}" />
<!-- Neither of this works -->
</p:ajax>

所以我可以做

@Value("#{request.getParameter('id')}")
protected Long id;

在我的豆子上。 如何将此参数传递给请求?

【问题讨论】:

  • 您的支持 bean 是 Spring 托管 bean?那个 bean 的作用域是什么?
  • 是的,它由 spring 管理,我使用的是本文中的方法。 harezmi.com.tr/spring-view-scope-for-jsf-2-users
  • 根据本文,您正在使用视图范围。托管属性(如您的示例中的 @View 注释属性)在 bean 创建后立即注入。以后不能注入。在此 AJAX 请求中,您的 bean 已经创建。
  • 有点复杂。我有处理这个 tabChange 事件的 bean,它将页面加载到 ui:include 组件。这些加载的页面正在使用另一个我需要此 ID 的 bean。 &lt;p:layoutUnit id="tabContent"&gt;&lt;ui:include src="#{integrationBean.template}" /&gt;&lt;/p:layoutUnit&gt;integrationBean.tabChanged 方法只是将模板属性设置为要加载的模板名称。
  • 您是否尝试过 JSF @ViewScoped@ManagedPropety 组合来实现这一点,而不是将 bean 范围移植到 Spring 中?

标签: ajax spring jsf primefaces


【解决方案1】:

在你的 xhtml 中使用&lt;f:param/&gt;

<f:param name="id" value="#{integrationBean.id}" />

您可以使用 ExternalContext#getRequestParameterMap() 从 backing bean 中检索它

Map<String, String> map = (Map<String, String>) externalContext.getRequestParameterMap();

String paramValue= map.get("paramName");

【讨论】:

  • 我知道如何从请求中获取参数。问题是请求中没有参数“id”。所以在这种情况下 paramValue 为空。
【解决方案2】:

通过将 id 放入 flash 范围并在 ajax 请求中取回它来解决它。这不是理想的解决方案,但它确实有效。

【讨论】:

  • 如果同一表单上的验证/转换失败,您将丢失它。
【解决方案3】:

使用&lt;p:remoteCommand&gt;

<p:ajax event="tabChange" oncomplete="tabChangeCommand()" />
<p:remoteCommand name="tabChangeCommand" actionListener="#{integrationBean.tabChanged}" update="tabContent">
    <f:param name="id" value="#{integrationBean.id}" />
</p:remoteCommand>

【讨论】:

    猜你喜欢
    • 2013-06-28
    • 1970-01-01
    • 2012-03-03
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多