子selectOneMenu JSF 1.2的填充值不正确

时间:2014-06-10 22:03:24

标签: java jsf richfaces

我在填充子SelectOneMenu的值时遇到问题。当我更改父selectOneNode中的值时,将删除子selectOneNode中的值,而不是插入new。

我的xhtml文件有一部分:

<a4j:region>
<h:selectOneMenu id="dict_trg" value="#{backingBean.trgDictId}" disabled="false" rendered="#{backingBean.itemEdited}">
    <c:forEach var="dict" items="#{backingBean.dictionaries}">
        <f:selectItem itemLabel="#{dict.name}" itemValue="#{dict.dicId}" />
    </c:forEach>
    <a4j:support ajaxSingle="true" event="onchange" reRender="entry_trg" /> 
</h:selectOneMenu>

<br />
<br />


<h:selectOneMenu id="entry_trg" value="#{backingBean.trgEntryId}" disabled="false" rendered="#{backingBean.itemEdited}">
    <c:forEach var="entry" items="#{backingBean.trgDictionaryEntries}">
        <f:selectItem itemLabel="#{entry.localizedName}" itemValue="#{entry.dntId}" />
    </c:forEach>
</h:selectOneMenu>
</a4j:region>

还有负责获取selectOneMenu

列表条目的方法
public List<Dictionary> getDictionaries(){
    return getDictionaryDataManager().getDictionaries();    
}

public List<DictionaryEntry> getTrgDictionaryEntries(){
      getDictionaryDataManager().getDictionary(12); 
}

我检查了这些方法,它们总是返回包含少量项目的列表。知道我做错了吗?

1 个答案:

答案 0 :(得分:2)

如果您有一组项目,请使用<f:selectItems>,使用<c:forEach>就可以解决这个问题(您无法部分重新渲染使用<c:xyz>构建的内容)。

<h:selectOneMenu id="dict_trg" value="#{backingBean.trgDictId}" disabled="false" rendered="#{backingBean.itemEdited}">
    <f:selectItems var="dict" value="#{backingBean.dictionaries}" itemLabel="#{dict.name}" itemValue="#{dict.dicId}" />
    <a4j:support ajaxSingle="true" event="onchange" reRender="entry_trg" /> 
</h:selectOneMenu>