简体   繁体   English

f:ajax无法呈现h:selectManyListbox

[英]f:ajax not rendering h:selectManyListbox

Using f:ajax component with h:selectManyListbox , it is firing the listener method but not refreshing the rendering list. f:ajax组件与h:selectManyListbox ,会触发侦听器方法,但不会刷新呈现列表。

I have Market. 我有市场。 When I select market it needs to display Sub-Markets. 当我选择市场时,它需要显示子市场。 Initial page load will have all the Markets and Sub-Markets, but it needs to filter when user selects "Market". 初始页面加载将包含所有市场和子市场,但是当用户选择“市场”时需要对其进行过滤。

Using below code: 使用以下代码:

   <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>

Used " pt " for pass-through because JSF prefixing dynamic id. 使用“ pt ”进行传递,因为JSF为动态ID加上了前缀。

How to resolve this problem? 如何解决这个问题?

Simple solution. 简单的解决方案。 Replace 更换

<f:ajax event="change" execute="@this" render="@this udalist3" 
listener="#{licenseSelectionBean.onChangeFilter()}" /> 

with

<f:ajax event="change" execute="@this" render="@form" 
listener="#{licenseSelectionBean.onChangeFilter()}" />

This might cause some unnecesarry traffic. 这可能会导致不必要的流量。 You can also encapsulate the second ui:fragment in a panelgroup, eg 您也可以将第二个ui:fragment封装在一个面板组中,例如

<h:panelGroup id="wrapper">
  <ui:fragment rendered="#{udaList.index eq 2}">
   ....
</h:panelgroup>

and add replace "udalist3" with "wrapper" in the f:ajax render attribute. 并在f:ajax渲染属性中将“ udalist3”替换为“包装器”。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM