将f:ajax
组件与h:selectManyListbox
一起使用时,它会触发侦听器方法,但不会刷新渲染列表。
我有市场。当我选择市场时,它需要显示子市场。初始页面加载将包含所有市场和子市场,但需要在用户选择“市场”时进行过滤。
使用以下代码:
<ui:fragment id="uda2" rendered="#{udaList.index eq 1}">
<div class=" row form-group" >
<label class="col-sm-2" for="sel-service">Market:</label>
<div class="col-sm-10">
<h:selectManyListbox style="width:360px;" multiple="" pt:aria-required="true" required="required" pt:data-toggle="chosen"
disabled="# {licenseSelectionBean.isFieldEnabled(FormFieldsEnum.ITEM_UDA2)}"
id="#{FormFieldsEnum.ITEM_UDA2.getFieldCode()}" size="1"
name="#{FormFieldsEnum.ITEM_UDA2.getFieldCode()}"
value="#{licenseSelectionBean.selectedItemUda2}"
styleClass="sel-chosen">
<f:selectItems var="uda2"
value="#{licenseSelectionBean.selectUda2}" />
<f:ajax event="change" execute="@this" render="@this udalist3"
listener="#{licenseSelectionBean.onChangeFilter()}" />
</h:selectManyListbox>
</div>
</div>
</ui:fragment>
<ui:fragment rendered="#{udaList.index eq 2}">
<div class="row form-group" >
<label class="col-sm-2" for="sel-service">Sub-Market:</label>
<div class="col-sm-10">
<h:selectManyListbox style="width:360px;" multiple="" pt:aria-required="true" required="required" pt:data-toggle="chosen"
disabled="#{licenseSelectionBean.isFieldEnabled(FormFieldsEnum.ITEM_UDA3)}"
size="1"
pt:name="udalist3"
value="#{licenseSelectionBean.selectedItemUda3}"
pt:id="udalist3"
styleClass="sel-chosen">
<f:selectItems var="uda3"
value="#{licenseSelectionBean.selectUda3}" />
<!-- <f:ajax render="#{FormFieldsEnum.ITEM_UDA4.getFieldCode()}"
listener="#{licenseSelectionBean.onChangeFilter()}" /> -->
</h:selectManyListbox>
</div>
</div>
</ui:fragment>
使用“ pt ”进行传递,因为JSF为动态ID加前缀。
如何解决此问题?
答案 0 :(得分:0)
简单的解决方案。取代
<f:ajax event="change" execute="@this" render="@this udalist3"
listener="#{licenseSelectionBean.onChangeFilter()}" />
与
<f:ajax event="change" execute="@this" render="@form"
listener="#{licenseSelectionBean.onChangeFilter()}" />
这可能会导致一些不必要的流量。您还可以将第二个ui:fragment封装在一个面板组中,例如
<h:panelGroup id="wrapper">
<ui:fragment rendered="#{udaList.index eq 2}">
....
</h:panelgroup>
并添加替换&#34; udalist3&#34;用&#34;包装&#34;在f:ajax渲染属性中。