Jsf Primefaces SelectOne菜单,自定义内容不显示列

Jsf Primefaces SelectOne菜单,自定义内容不显示列,jsf,primefaces,Jsf,Primefaces,我在SelectOneMenu中显示自定义内容时遇到问题。我现在使用的是Primefaces 3.5,我在showcase中测试了该示例,效果很好,所以不幸的是问题出在PEBCAC上。 这是我的转换器代码: @Override public Object getAsObject(FacesContext ctx, UIComponent component, String id) { groups = getGroups();//gets the groups here pTyp

我在SelectOneMenu中显示自定义内容时遇到问题。我现在使用的是Primefaces 3.5,我在showcase中测试了该示例,效果很好,所以不幸的是问题出在PEBCAC上。
这是我的转换器代码:

@Override
public Object getAsObject(FacesContext ctx, UIComponent component, String id)
{
    groups = getGroups();//gets the groups here
    pType toReturn = new pType();
    if(groups.size()>0){
      toReturn = groups.get(0);
      return toReturn;
     }
   return "";       
}

@Override
public String getAsString(FacesContext fc, UIComponent uic, Object o)
{

    if (o == null || o.equals(""))
    {
        return "---";
    } else
    {           
        try{
            pType val = (pType)o;
            return String.valueOf(val.getRecordID());
        }catch(Exception ex){               
            ex.printStackTrace();
            return "---";
        }
    }
}
这就是我现在正在使用的xhtml:

<p:selectOneMenu value="#{controller.selectedVal}"
        rendered="#{controller.showMenu}" effect="fade"
        converter="converter" panelStyle="width:150px" var="p"
        style="width:160px" filter="true" filterMatchMode="contains">
        <f:selectItem itemLabel="Select One" itemValue="" />
        <f:selectItems var="pType"
            itemLabel="#{controller.getNumber(pType)}"
            itemValue="#{pType}" value="#{controller.savedValues}">
                    <p:column>#{p.var1} - #{p.var2}
                    </p:column>
                </f:selectItems>
</p:selectOneMenu>

#{p.var1}-{p.var2}

控制器是会话范围的managedbean。变量savedValues是一个对象列表,它使用正确的数据填充,并且在调用它时具有数据。现在有了上面的代码,列表就打开了,里面没有数据。如果我将变量切换到“pType”而不是“p”,下拉菜单将有一个从controller.getNumber(pType)获取的值列表,尽管没有自定义数据加载到菜单中。但我看到的所有示例都表明,使用的变量来自selectOneMenu,这也是我有点困惑的地方,因为它似乎总是来自selectItems的值字段。

首先,我会尝试删除所有不必要的属性,如过滤器或渲染,并转向更简单的方式,直到您有了一个可用的版本。这会比您预期的更频繁地隔离错误

您是否将转换器注释为具有正确名称和类的FacesConverter?
getGroups()
方法的具体功能是什么,它在转换器中是否包含正确的值?为什么
getaObject
总是返回第一个pType

itemLabel实际上应该是什么,您希望的结果不是显示pType的id或名称吗

  • SelectOne菜单值:所选项目的值
  • 选择一个菜单变量:您可以在p:列中访问的项
  • 选择项目标签:下拉菜单中显示的文本
  • selectItems itemValue:发送到bean的setter的实际值

在没有附加属性的情况下尝试仍然会得到相同的结果。getGroups从数据库中获取对象列表;应该只找到一条记录,所以它总是得到第一个结果。itemLabel应该是从pType获得的编号。这一部分似乎工作正常,但下拉菜单应该显示2个变量,它只显示itemLabel值。