Primefaces selectOneListbox不显示项目文本(项目中也不包含数据)

Primefaces selectOneListbox不显示项目文本(项目中也不包含数据),primefaces,Primefaces,我的PrimeFaces selectOneListbox中有3000个项目,这可以从chrome调试器中的对象检查器中看到。div行都在那里,但其中没有用于显示文本的数据。div都是空的 我反复检查,itemValue指向其中包含数据的company.name。此外,itemLabel获取公司的唯一符号,因此也可以,因为这些数据都是有效的。然而,我遗漏了一些东西,因为UI显示一个空白框,明显高于其默认的空框——正如我所说,在chrome的调试器中以空div的形式包含3000个空项 我的xhtm

我的PrimeFaces selectOneListbox中有3000个项目,这可以从chrome调试器中的对象检查器中看到。div行都在那里,但其中没有用于显示文本的数据。div都是空的

我反复检查,itemValue指向其中包含数据的company.name。此外,itemLabel获取公司的唯一符号,因此也可以,因为这些数据都是有效的。然而,我遗漏了一些东西,因为UI显示一个空白框,明显高于其默认的空框——正如我所说,在chrome的调试器中以空div的形式包含3000个空项

我的xhtml中selectOneListbox的代码如下所示。我在托管bean中尝试将映射作为集合和列表(因此我将值更改为我想要尝试的变量)。地图和公司列表都产生了相同的结果——javascript中包含3000个条目的列表(如下所示)

现在我还有一个转换器:

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;

import com.appzany.stockService.BeanUtil;
import com.appzany.stockService.entity.Company;
import com.appzany.stockService.stockservice.StockService;

@FacesConverter("companyConverter")
public class CompanyConverter implements Converter {

    private StockService stockService = null;

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {

        if(stockService == null)
            stockService = BeanUtil.getBean(StockService.class);
        return stockService.getCompany(value);
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        return ((Company)value).getSymbol();
    }
}

您似乎想使用“高级”p:selectOneListbox,它在中的位置如下

<p:selectOneListbox id="advanced" value="#{selectOneView.theme}" converter="themeConverter" var="t" filter="true" filterMatchMode="contains">

    <f:selectItems value="#{selectOneView.themes}" var="theme" itemLabel="#{theme.displayName}" itemValue="#{theme}" />

    <p:column>
        <h:graphicImage name="showcase/images/themeswitcher/themeswitcher-#{t.name}.png" alt="#{t.name}" styleClass="ui-theme" />
    </p:column>

    <p:column>
        <h:outputText value="#{t.displayName}" />
    </p:column>
</p:selectOneListbox>

我肯定有东西被渲染了

这不会解决您的问题,但我要做的几件事是将您的实体变成可序列化对象,并实现一个好的Equals()、HashCode()方法。哦,我想这一定是问题所在!我敢打赌就是这样!!!你是对的,它没有解决问题。不过,我更新了问题,将您的建议包括在我的实体中。谢谢在本页中,我缺少转换器:,但我没有像他们那样的转换器(converter=“themeConverter”)-不知道如何为我的示例创建它,因为在他们提供的示例中找不到这个“themeConverter”。创建转换器很容易。参见本教程:该死,我在添加转换器之前删除了列。忘了是我干的,所以忘了把它们放回去。谢谢
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;

import com.appzany.stockService.BeanUtil;
import com.appzany.stockService.entity.Company;
import com.appzany.stockService.stockservice.StockService;

@FacesConverter("companyConverter")
public class CompanyConverter implements Converter {

    private StockService stockService = null;

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {

        if(stockService == null)
            stockService = BeanUtil.getBean(StockService.class);
        return stockService.getCompany(value);
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        return ((Company)value).getSymbol();
    }
}
<p:selectOneListbox id="advanced" value="#{selectOneView.theme}" converter="themeConverter" var="t" filter="true" filterMatchMode="contains">

    <f:selectItems value="#{selectOneView.themes}" var="theme" itemLabel="#{theme.displayName}" itemValue="#{theme}" />

    <p:column>
        <h:graphicImage name="showcase/images/themeswitcher/themeswitcher-#{t.name}.png" alt="#{t.name}" styleClass="ui-theme" />
    </p:column>

    <p:column>
        <h:outputText value="#{t.displayName}" />
    </p:column>
</p:selectOneListbox>
<p:column>
    <h:outputText value="#{t.name}" />
</p:column>

<p:column>
    <h:outputText value="#{t.symbol}" />
</p:column>