SelectOneMenu仅显示对象而不是应该显示的内容

时间:2012-10-19 12:30:47

标签: jsf primefaces

我有一个加载BD列表的selectOneMenu,除了它在selectOneMenu中显示值的时间外,所有步骤的调试都是正确的。在页面上出现对象名称“JanelaPortabilidade @ 7437”,而不是字符串。

我的代码:

public List<SelectItem> listarHoraJanela(DateSelectEvent event) {  

        dataF = event.getDate();  
        Calendar dataAux = new GregorianCalendar();               
        dataAux.setTime(dataF);   


        //Corrigir  
        if (listaHoraJanela == null) {  

            listaHoraJanela = new ArrayList<JanelaEAPortabilidade>();  
            listaHoraJanela = consultaJPortabilidade.listarHoraJanela(dataAux);  
            listSelectHoraJ.add(new SelectItem("", ""));              

            for (JanelaEAPortabilidade horaJ : listaHoraJanela) {  
                String dataFormat = String.format("%02d",horaJ.horIniJanela.get(Calendar.HOUR_OF_DAY));  
                System.out.println(dataFormat);//So here is ok, print in console correct string 
                listSelectHoraJ.add(new SelectItem(horaJ.getIdtJanela(),dataFormat));  


            }  
        } 

XHTML:

<h:outputText value="Hora da Janela:" for="horaJanela" />  
<h:selectOneMenu value="#{bean.codHoraJanela}" id="horaJanela"         
    rendered="#{bean.type == 'Fixo'}" >  
<f:selectItems value="#{bean.listaHoraJanela}" />

它能是什么?我一定错过了什么。

谢谢!

2 个答案:

答案 0 :(得分:0)

我很惊讶代码甚至可以工作。如果我没有错过任何代码应该抛出NullPointerException。在您发布的JSF中,未创建DateSelectEvent,而是在没有任何参数的情况下调用该方法。因此,Java方法中的DateSelectEvent应为NULL

您看到的输出是对象的toString()方法的结果。可能那里表示的对象来自托管bean中的codHoraJanela方法。修复listarHoraJanela方法以返回对象列表。

答案 1 :(得分:0)

您需要做的是为f:selectItems使用itemLabel和itemValue属性。以下是PrimeFaces网站的一个例子(来自代码的pojo部分的http://www.primefaces.org/showcase-labs/ui/selectOneMenu.jsf):

<f:selectItems value="#{autoCompleteBean.players}" var="player" itemLabel="#{player.name}" itemValue="#{player}"/>  

itemLabel将显示在下拉列表中,itemValue将返回(在您的示例中为#{bean.codHoraJanela})。