Пустые значения ‹h:selectOneMenu›внутри ‹ui:repeat› не установлены для поддержки bean-компонента во время вызова ajax

Пустое/нулевое значение h:selectOneMenu во время вызова ajax не устанавливается для свойства в вспомогательном компоненте, тогда как, если я выбираю любой элемент раскрывающегося списка, который имеет непустое/ненулевое значение, он устанавливается в свойство в резервном компоненте bean во время вызова ajax. Я замечаю это поведение, только если использую h: selectOneMenu и f: ajax внутри тега ui: repeat. И без тега ui:repeat значения (как пустые, так и непустые) правильно устанавливаются для свойства в компоненте поддержки во время вызова ajax.

Ниже приведен фрагмент кода вышеупомянутого сценария:

<h:panelGrid id="details">
<ui:repeat id="listId" value="#{new.List}" var="item" varStatus="itemStatus">
    <h:panelGrid id="idDoc">
    <ui:repeat id="docListId" value="#{item.docs}" var="docItem" varStatus="docStatus">
        <h:selectOneMenu id="type"  value="#{docItem.docType}" label="Type" style="" styleClass='' >

                <f:selectItems value="#{new.docSelections}"/>

                <f:ajax onevent="refreshDoc" event="valueChange" render="@this :form:listId:docListId:idDoc" execute=":form:listId:details" listener="#{new.save}"/>
            </h:selectOneMenu>
    </ui:repeat>
    </h:panelGrid>
</ui:repeat>
</h:panelGrid>

Есть ли проблема в том, как я использовал ui:repeat,h:selectoneMenu и f:ajax?


person Nila    schedule 05.06.2012    source источник
comment
это работает с render=@form execute=@form ?   -  person Daniel    schedule 06.06.2012
comment
Ткс за ответ. Нет. Я пробовал, но все же пустое значение не установлено для поддерживающего компонента.   -  person Nila    schedule 06.06.2012
comment
Кстати, удалите event="valueChange" (и проверьте еще раз...)   -  person Daniel    schedule 06.06.2012
comment
есть несколько проблем с вложенным ui:repeat, вероятно, причина в этом. попробуйте удалить один из них (для тестирования) и посмотрите, работает ли он.   -  person damian    schedule 06.06.2012


Ответы (1)


Вы, кажется, используете Мохарру. У него действительно было несколько проблем, связанных с (вложенным) <ui:repeat> и сохранением состояния компонентов. Попробуйте обновить Mojarra до последней версии.

В качестве альтернативы можно просто заменить <h:panelGrid><ui:repeat> на <h:dataTable>, так как это эффективно генерирует ту же разметку. <h:dataTable> не страдает от проблем <ui:repeat>.

<h:dataTable id="details" value="#{new.List}" var="item" binding="#{itemStatus}">
  <h:column>
    <h:dataTable id="idDoc" value="#{item.docs}" var="docItem" binding="#{docStatus}">
      <h:column>
        <h:selectOneMenu id="type"  value="#{docItem.docType}" label="Type" style="" styleClass='' >
          <f:selectItems value="#{new.docSelections}"/>
          <f:ajax onevent="refreshDoc" event="valueChange" render="@this :form:listId:docListId:idDoc" execute=":form:listId:details" listener="#{new.save}"/>
        </h:selectOneMenu>
      </h:column>
    </h:dataTable>
  </h:column>
</h:dataTable>
person BalusC    schedule 06.06.2012
comment
Спасибо @BalusC. В настоящее время я внедряю изменения в свое приложение в большинстве мест... приму их, если не обнаружу никаких других проблем, связанных с этим. - person Nila; 13.06.2012