Jsf Primefaces SelectOne菜单,自定义内容不显示列
我在SelectOneMenu中显示自定义内容时遇到问题。我现在使用的是Primefaces 3.5,我在showcase中测试了该示例,效果很好,所以不幸的是问题出在PEBCAC上。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
这是我的转换器代码:
@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的实际值