带有地图值条目的 whtml 中的验证错误

Validation Error in whtml with map value entry

我想在 xhtml 页面(使用 jsf)中显示 HashMap 的元素:

  <h:selectOneMenu id="elt" value="#{mgbean.elt}">
                       <c:forEach var="entry" items="#{mgbean.map}">
                            <f:selectItem itemValue="#{entry.key}" itemLabel="#{entry.value}" escape="false" />                            
                       </c:forEach>
     </h:selectOneMenu>

地图如下:

map= new LinkedHashMap<String, String>();
                map.put("1", ">=20");
                map.put("2","<20");

我遇到了这个错误:

PM org.apache.myfaces.lifecycle.RenderResponseExecutor execute WARNING: There are some unhandled FacesMessages, this means not every FacesMessage had a chance to be rendered. These unhandled FacesMessages are: - selectionForm:elt: Validation Error: Value is not valid

我尝试添加以下行,但出现相同的错误

<?xml version="1.0" encoding="UTF-8"?>  

<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head>

我该如何解决这个错误。

更新:

public String elt; 与 getter 和 setter.

public Map<String, String> map;


map= new LinkedHashMap<String, String>();
            map.put("1", ">=20");
            map.put("2", "<20");

我认为你应该选择 f:selectItem,它会将键作为标签,将值作为..值:

<h:selectOneMenu id="elt" value="#{mgbean.elt}">
    <f:selectItems value="#{mgbean.map}"/>                            
</h:selectOneMenu>

更新

如果您想手动定义标签是键还是值,请尝试:

<h:selectOneMenu id="elt" value="#{mgbean.elt}">
     <f:selectItems value="#{mgbean.map.entrySet()}"
         var="entry" itemValue="#{entry.value}" itemLabel="#{entry.key}"/>                            
</h:selectOneMenu>

另外 请记住,在任何给定时间点,mgbean.elt 字段中包含的值必须始终是地图的键之一。如果出于某种原因您将该值手动设置为不同于“1”或“2”的值,您可能会收到上述错误。