1

ajax 呼び出し中の h:selectOneMenu の空/null 値は、バッキング Bean のプロパティに設定されませんが、空でない/null でない値を持つドロップダウン項目を選択すると、バッキングのプロパティに設定されますajax 呼び出し中の Bean。ui:repeat タグ内で h:selectOneMenu & f:ajax を使用した場合にのみ、この動作に気付きました。また、 ui:repeat タグがないと、値 (空と空以外の両方) は、ajax 呼び出し中にバッキング Bean のプロパティに適切に設定されます。

以下は、上記のシナリオのコード スニペットです。

<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 の使用方法に問題はありますか?

4

1 に答える 1

2

Mojarraを使用しているようです。実際、(ネストされた)<ui:repeat>およびコンポーネントの状態の保存に関連するいくつかの問題がありました。Mojarra を最新バージョンにアップグレードしてみてください。

別の方法は、同じマークアップを効果的に生成するため、単に<h:panelGrid><ui:repeat>aに置き換えることです。<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>
于 2012-06-06T13:15:10.823 に答える