Ajax调用有时会重新实现整个@ViewScoped bean

时间:2014-09-04 21:36:53

标签: ajax jsf primefaces view-scope

我正在与JSF合作开展项目,我不是专家,所以我在这里要求一些指导。

我们正在使用模板,我们在视图中有一些表,其中有一个“onRowSelect”事件,它有一个监听器和一个带update="@form"的Ajax调用

这样工作正常,它会在视图中刷新一些div并显示新信息,但我试图从一个组件中完全相同,并且它的工作方式完全不同。

在该组件中,我有一些过滤器和一个显示“过滤器”的按钮。它有相同的ajax,但@form无法识别,因此我必须输入一些ID并调用update=":workspace",并且它正在刷新。

这里的问题是,它正在重新实现@ViewScoped Bean,因此我所做的过滤器更改不会反映在视图中。如果我将变量移动到Session,它可以工作,但遵循架构,这些变量应该在View中。

有趣的是,如果我在过滤器中进行更改,但不是单击“过滤器”按钮,而是单击表中的一行,整个表单将被刷新并保留过滤器中的更改。无法弄清楚为什么它与rowSelect中的ajax更新一起工作,但它没有按钮中的ajax更新。

有什么想法吗?

问题相关here

修改

我从视图中调用组件,发送一些参数和Bean我是信息表单。电话是:

<pc:filters bean="#{incidentsManagedBean}" />

在filter实现中,我从参数Bean调用属性,并进行Ajax刷新。

  <!--        Territorio Municipio-->
  <div class="one-filter" style="#{cc.attrs.bean.selectedTerritory != 2 ? 'display:none;' : ''}">
    <span class="ov-selection-label">Municipio:</span>
    <span class="calendar-select">
      <p:autoComplete id="acTown" styleClass="inputTown" panelStyleClass="townSelected"
                      placeholder="#{cc.attrs.bean.selectedPlace == null ? '--Nombre, Dane, Dpto--' : sessionBean.selectedPlace}"
                      value="#{cc.attrs.bean.selectedPlace}"
                      emptyMessage="No hay coincidencias"
                      completeMethod="#{cc.attrs.bean.onPlaceChangeList}" 
                      var="row" itemLabel="#{cc.attrs.bean.getIndex(row,1)}" itemValue="#{cc.attrs.bean.getIndex(row,0)}"
                      forceSelection="false" effect="fade"  >
        <p:ajax event="itemSelect" listener="#{cc.attrs.bean.onPlaceChange}" />
      </p:autoComplete>
    </span>
  </div>
  <!--        End Territorio Municipio-->

执行Ajax的按钮

<p:commandButton id="update-filters-button" value="Filtrar" styleClass="filter-button">
  <p:ajax event="click" listener="#{cc.attrs.bean.onUpdateFilters()}" oncomplete="updateView()" />
</p:commandButton>
<p:remoteCommand name="updateView" update=":workspace" />

0 个答案:

没有答案