【问题标题】:Empty values of <h:selectOneMenu>inside <ui:repeat> is not set to backing bean during ajax call<ui:repeat> 内 <h:selectOneMenu> 的空值在 ajax 调用期间未设置为支持 bean
【发布时间】:2012-06-05 10:58:19
【问题描述】:

在 ajax 调用期间 h:selectOneMenu 的空/空值未设置为支持 bean 中的属性,而如果我选择任何具有非空/非空值的下拉项,则将其设置为属性在 ajax 调用期间在 backing 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 的方式有什么问题吗?

【问题讨论】:

  • 它是否与 render="@form" execute="@form" 一起使用?
  • Tx 回复。不,我已经尝试过了,但仍然没有将空值设置为支持 bean。
  • b.t.w 删除event="valueChange"(并再次检查...)
  • 嵌套的 ui:repeat 有几个问题,这可能就是原因。尝试删除其中一个(用于测试),看看它是否有效。

标签: ajax jsf-2 selectonemenu uirepeat


【解决方案1】:

您似乎在使用 Mojarra。它确实存在与(嵌套)&lt;ui:repeat&gt; 和组件状态保存相关的几个问题。尝试将 Mojarra 升级到 the latest version。

另一种方法是将&lt;h:panelGrid&gt;&lt;ui:repeat&gt; 替换为&lt;h:dataTable&gt;,因为它可以有效地生成相同的标记。 &lt;h:dataTable&gt; 不会受到 &lt;ui:repeat&gt; 问题的影响。

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

【讨论】:

  • 感谢@BalusC。我目前正在大多数地方对我的应用程序进行更改...如果我没有发现与此相关的任何其他问题,我会接受它。
猜你喜欢
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-23
  • 2013-03-24
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多