Primefaces SelectOneMenu,自定义内容不显示列

时间:2014-03-20 17:20:16

标签: jsf primefaces

我遇到了在SelectOneMenu中显示自定义内容的问题。我现在正在使用Primefaces 3.5并且我在展示中测试了这个例子并且工作正常,所以不幸的是问题是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>

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

1 个答案:

答案 0 :(得分:0)

首先,我会尝试删除所有不必要的属性,例如过滤器或渲染,并在您拥有可用版本之前更加简单。这比您预期的更频繁地隔离错误。

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

itemLabel究竟应该是什么,您希望的结果不是显示pType的id或名称吗?

  • selectOneMenu值:所选项目的值
  • selectOneMenu var:您可以在p:column
  • 中访问的项目
  • selectItems itemLabel:显示在下拉菜单中的文本
  • selectItems itemValue:发送到bean的setter的实际值