带有地图值条目

时间:2017-03-08 12:17:40

标签: validation jsf selectonemenu

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

  <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执行   警告:有一些未处理的FacesMessages,这意味着并非每一个   FacesMessage有机会被渲染。这些未经处理   FacesMessages是:    - selectionForm:elt:验证错误:值无效

我试图添加以下行但显示相同的错误

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

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

我该如何修复此错误。

更新:

带有getter和setter的

public String elt;

public Map<String, String> map;


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

1 个答案:

答案 0 :(得分:0)

我认为您应该选择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字段中包含的值必须始终是地图的其中一个键。如果由于某种原因你手动将该值设置为不同的值,那么&#34; 1&#34;或&#34; 2&#34;,您可能会收到上述错误。