ajax调用期间h:selectOneMenu的空/ null值未设置为辅助bean中的属性,而如果我选择任何具有非空/非空值的下拉项,则将其设置为属性在ajax调用期间在backing bean中。 我只有在使用h:selectOneMenu& f:ui:repeat标签内的ajax。并且,如果没有ui:repeat标记,则在ajax调用期间,值(空白和非空)都会正确设置到辅助bean中的属性。
以下是上述场景的代码snipet:
<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的方式有什么问题:重复,h:selectoneMenu和f:ajax?
答案 0 :(得分:2)
你似乎在使用Mojarra。它确实有几个与(嵌套)<ui:repeat>
和组件状态保存相关的问题。尝试将Mojarra升级到the latest version。
另一种方法是将<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>