我正在与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" />