【问题标题】:f:ajax not rendering h:selectManyListboxf:ajax 不渲染 h:selectManyListbox
【发布时间】:2015-04-14 20:34:56
【问题描述】:

f:ajax 组件与h:selectManyListbox 一起使用,它会触发listener 方法,但不会刷新渲染列表。

我有市场。当我选择市场时,它需要显示子市场。初始页面加载将包含所有市场和子市场,但需要在用户选择“市场”时进行过滤。

使用以下代码:

   <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 加上前缀。

如何解决这个问题?

【问题讨论】:

    标签: ajax jsf-2


    【解决方案1】:

    简单的解决方案。替换

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

    并在 f:ajax 渲染属性中将“udalist3”替换为“wrapper”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-24
      • 2017-01-18
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 2011-05-07
      • 2015-05-10
      • 1970-01-01
      相关资源
      最近更新 更多